OpenGL ES 3. Mipmap 纹理

大家好,接下来将为大家介绍OpenGL ES 3. Mipmap 纹理(多级渐远纹理)。

        当需要处理的场景很大时,若不采用一些技术手段,可能会出现远处地形视觉上更清楚,近处地形更模糊的反真实现象。 这主要是由于透视投影中有近大远小的效果,远处的地形投影到屏幕上尺寸比较小,近处的尺寸 比较大,而整个场景使用的是同一幅纹理图。因此,对远处的物体而言纹理图被缩小进行映射,自然很清楚;而近处的物体可能纹理图需 要被放大进行映射,自然就发虚。

        这时我们可能会想到,应该对远处的地形采用尺寸较小分辨率的纹理,近处的采用尺寸较大分辨率高的纹理,这其实就是 mipmap(多级渐远纹理)的基本思想。

        mipmap系列纹理的生成仅需要在加载纹理时进行一些设置即可,其他的工作是由渲染管 线自动完成的。mipmap 的基本工作原理如下图所示。

系统会在纹理加载时自动生成一系列由大到小的纹理图。每幅纹理图是前一幅尺寸的 1/2,直􏴐纹理图的尺寸缩小到 1 * 1。

 

        一系列的 mipmap 纹理图生成成功后,当应用程序运行时,渲染管线会首先根据情况计算出细节级别,然后根据细节级别决定使用系列中哪一个分辨率的纹理图。开发中将采样方式设置为mipmap,并自动生成一系列的 mipmap 纹理图的基本代码如下。

GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, //设置 MIN 情况为 mipmap 最􏰯点采样        
       GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR_MIPMAP_NEAREST);
GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, //设置 MAG 情况为 mipmap 线性采样
       GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR_MIPMAP_LINEAR);
GLES30.glGenerateMipmap(GLES30.GL_TEXTURE_2D); //自动生成 mipmap 系􏴓系列纹理

        开发中使用 mipmap 纹理并设置采样方式时,除了可以使用前面介绍过的最近点采样和线性 采样,一般需要选用 mipmap 专用的 4种纹理采样方式。

 

GL_NEAREST_MIPMAP_NEAREST使用最邻近的多级渐远纹理来匹配像素大小,并使用邻近插值进行纹理采样
GL_LINEAR_MIPMAP_NEAREST使用最邻近的多级渐远纹理级别,并使用线性插值进行采样
GL_NEAREST_MIPMAP_LINEAR在两个最匹配像素大小的多级渐远纹理之间进行线性插值,使用邻近插值进行采样
GL_LINEAR_MIPMAP_LINEAR在两个邻近的多级渐远纹理之间使用线性插值,并使用线性插值进行采样

 

最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值