OpenGL 纹理缩小伪像

OpenGL texture minification artifacts

我有这个网格,它基本上是从图集中对其纹理进行采样。当纹理被放大时,它会按预期工作。

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

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

  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);

我实际上是在加载带有配置文件的纹理图集,如下所示:

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 的解决方案后,它是这样的!

我建议将 mipmap 层限制为 4,因为图块的大小为 16x16。见 Mipmap range and glTexParameter:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4);

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