2

我已经加载了纹理,并将其显示在立方体和平面上。在平面和立方体相交的地方,有一些难看的视觉伪影。

下面两张图片说明了这个问题:

图 1 - 这是什么:

Image1 - 这是什么?

图 2 - 相同的场景,其他视角:

Image2 - 如何修复?

这是我加载图像的方式:

static const GLenum gl_format[4] = { GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_BGR, GL_BGRA };

GLuint LoadTGATexture(const char* filename)
{
    //image is already loaded in --- unsigned char[] data - int width - int height - int components
    unsigned int handle;

    glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy);

    glGenTextures(1, &handle);
    glBindTexture(GL_TEXTURE_2D, handle);

    glTexImage2D(GL_TEXTURE_2D, 0, components, width, height, 0, gl_format[components - 1], GL_UNSIGNED_BYTE, data);
    gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, gl_format[components - 1], GL_UNSIGNED_BYTE, data);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy);
    glBindTexture(GL_TEXTURE_2D, 0);

    delete [] data;
    return handle;
}

但是我该如何解决它,我的错误是什么?

4

1 回答 1

3

我猜这与你的质地无关。

从外观上看,您在剪辑时遇到了问题。我会验证glEnable(GL_DEPTHTEST),确保在设置透视矩阵时您的近平面是>0.0,这意味着不是 0.0 也不是负数。还要确保你的远平面不是一个非常庞大的数字。我通常停在 1000.0 并取得良好的效果。你可能想做一些更小的事情。

于 2013-03-03T16:13:05.797 回答