我想在屏幕(OpenGL ES 2.0)上绘制一些相同的图形(具有相同的纹理)。这些数字在放大和缩小滤镜中会有所不同。以及不同状态的 mipmap。 问题是:如果我使用 mipmapping 绘制任何图形(如果我调用 glGenerateMipmap() 函数),我无法关闭 mipmapping 模式。 如果我至少调用一次 glGenerateMipmap() ,是否可以关闭 mipmapping 模式?
最佳答案
glGenerateMipmap
仅生成较小的 mipmap 图像(基于顶级图像)。但是,如果您不使用正确的 mipmap 过滤器模式(通过 glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_..._MIPMAP_...)
),这些 mipmap 就不会用于过滤。因此,如果您不希望过滤纹理 mipmap,只需通过将 GL_NEAREST
或 GL_LINEAR
设置为缩小过滤器来禁用此特定纹理。同样,不调用glGenerateMipmap
并不意味着没有进行mipmapping。仍将使用可能的 mipmap 过滤器模式(这也是新创建的纹理的默认模式),只是 mipmap 图像包含垃圾(或者纹理实际上不完整,导致实现定义的行为,但通常是黑色纹理) .
同样,您不应在渲染前每帧调用 glGenerateMipmap
。设置纹理的基础图像后调用一次。就像所说的它生成 mipmap 图像一样,这些图像在生成后不会消失。决定是否实际使用 mipmapping 的是纹理对象的过滤模式。
关于opengl-es-2.0 - 在 OpenGL ES 2.0 中禁用 mipmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14685260/