我正在使用两倍大小的纹理 (128x128) 并将它的一小部分绘制到多边形上(将其用作纹理图集)。我设置了以下内容:
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
然而,结果是纹理仍然模糊在一起。看起来它正在使用 GL_LINEAR。
知道为什么纹理仍然会变得模糊而不是像素化吗?
这是一个例子:
字母 F 是图像的一部分。此处使用 128px 图像、256px、512px 和 1024px 绘制。正如您所看到的,它变得更好了,但即使在 1024 像素时,它仍然会稍微混合边缘。 我应该能够使用 128px 图像并使用 GL_NEAREST 将其放大并使其具有清晰的边缘。是什么导致它画成这样?
编辑
我已将应用程序更新为使用 GLES20,但问题仍然存在。 在绑定(bind)纹理之后和调用 drawArrays 之前,我尝试使用以下方法来确保我使用的是 GL_NEAREST:
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
编辑 2
即使不使用图集也会出现此问题。我在四边形上放了一个 8px x 8px 的 png,结果一片模糊。 OpenGL ES 2.0 不使用 GL_NEAREST 是否有某种原因?
结果如下:
最佳答案
我相信 glTexParameterf
应该是 glTexParameteri
。您将枚举作为最后一个参数传递,而不是 float 。
您是否也使用 glGetError 检查错误?
还要确保为每个要进行线性采样的纹理设置它。它的状态是每个纹理的,而不是全局的。
关于java - GL_NEAREST 上的 Android OpenGL mag 过滤器,小纹理仍然模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11733899/