我正在创建一个简单的opengl应用程序,它显然包含一些3d对象和纹理。然而,我的问题是每个纹理上都会出现伪影。它们沿边缘呈三角形。
我注意到,一旦我将视点移动到接近完美渲染的纹理,它就会消失。因此,我怀疑它有关于mipmapping或z-buffer的事情要做。 请注意,所有纹理坐标都是从.3ds文件加载的,并且所有纹理坐标都经过验证,在0-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);
答案 0 :(得分:3)
当我使用DirectX进行编程时,近平面/远平面距离比率导致边缘出现伪影。
在我的情况下,如果近距离飞机距离“摄像机”1个单位,远距离飞机距离10000个单位,则该比率为1/10000并且产生了问题。如果我将近平面设置为10或100,则比率变大。它解决了锯齿状边缘问题。
我不知道它是否适用于OpenGL,但是您可能想要查看它。