本文主要是介绍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 。
这篇关于OpenGL ES 3. Mipmap 纹理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!