删除OpenGL纹理工件

时间:2009-08-13 12:48:03

标签: opengl textures artifacts visual-artifacts

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

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

以下是我的问题图片:

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

1 个答案:

答案 0 :(得分:3)

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

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

我不知道它是否适用于OpenGL,但是您可能想要查看它。