去除 OpenGL 纹理伪影

Håk*_*kon 2 opengl textures artifacts visual-artifacts

我正在创建一个简单的 opengl 应用程序,它显然包含一些 3d 对象和纹理。然而,我的问题是伪影出现在每个纹理上。这些以沿边缘的三角形的形式出现。

我注意到,一旦我将视点移近它完美渲染的纹理,它就会消失。因此我怀疑它与 mipmapping 或 z-buffer 有关系。请注意,所有纹理坐标都是从 .3ds 文件加载的,并且所有这些坐标都经过验证在 0-1 的范围内。

这是我的问题的图片:

图片1

纹理加载如下:

//Texture parameters
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

//Define the 2d texture
glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, array);

//Create 2d mipmaps
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_RGBA, GL_UNSIGNED_BYTE, array);
Run Code Online (Sandbox Code Playgroud)

小智 5

当我使用 DirectX 进行编程时,近平面/远平面距离比率会导致边缘出现伪影。

就我而言,如果近平面距离“相机”1 个单位,远平面距离“相机”10000 个单位,则比例为 1/10000,这会产生问题。如果我将近平面设置为 10 或 100,则比率会变大。它解决了锯齿状边缘问题。

我不知道它是否/如何适用于 OpenGL,但您可能想查看一下。

  • 太好了,将近平面从 0.1 更改为 10 解决了问题! (2认同)