c++ - OpenGL 纹理缩小伪像

标签 c++ opengl-es textures texture-mapping mipmaps

我有这个网格,基本上是从 map 集中采样其纹理。当纹理被放大时,它会按预期工作。 enter image description here

然而,每当我从远处看它时,我开始看到纹理上的线条和蓝色色调,就好像它们在闪闪发光...... enter image description here

这是用于指定图像属性的代码:

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);

我实质上是使用配置文件加载纹理图集,如下所示: enter image description here

count 5
name grass_top
uv 0.750 0.750 0.81250 0.81250
name grass_side
uv 0.18750 0 0.250 0.06250
name grass_bottom
uv 0.1250 0 0.18750 0.06250
name dirt
uv 0.1250 0 0.18750 0.06250
name stone
uv 0.0625 0 0.125 0.0625A

这可能是什么问题,我完全被难住了......

编辑:实现 Rabbid76 的解决方案后,这就是它的样子! enter image description here

最佳答案

我建议将 mipmap 层限制为 4,因为图 block 的大小为 16x16。请参阅Mipmap rangeglTexParameter :

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4);

如果不指定最大 mipmap 级别,则纹理大小不超过 1x1 的所有 mipmap 级别都将用于纹理采样。在第 4 级以上,纹理图集的图 block 会混合。

关于c++ - OpenGL 纹理缩小伪像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62941869/

相关文章:

c++ - 来自命名空间的静态变量不会递增

opengl - 在 opengl 中显示任意大小的二维图像

android - OpenGL ES 是否比标准 2D 图形耗电更多?

android - 加载TextureAtlas后,有一段时间帧率较低

wpf - 避免 3D 圆柱模型中的接缝

opengl - sRGB纹理。这样对吗?

c++ - 为下一个 C++ 标准做准备

c++ - 为什么我不能用 c = new (char*)[10] 初始化 char** c,而 c = new char*[10] 可以?

c++ - 在头文件c++中重新定义函数

opengl-es - "GL_RENDERBUFFER_OES"中的 OES 意味着什么?