2

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

我注意到,只要我将视点移近它完美渲染的纹理,它就会消失。因此,我怀疑它与 mipmapping 或 z 缓冲区有关。请注意,所有纹理坐标都是从 .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);
4

1 回答 1

5

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

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

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

于 2009-08-13T13:08:22.337 回答