2

テクスチャを読み込んで、立方体と平面に表示しました。平面と立方体が交差するポイントには、醜い視覚的アーティファクトがいくつかあります。

この問題を示す 2 つの図を次に示します。

画像 1 - これは何ですか:

画像 1 - これは何ですか?

画像 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.00.0 ではなく、負の数でもないことを意味します。また、ファープレーンが非常に大きな数ではないことを確認してください。通常は 1000.0 で停止し、良好な結果が得られます。もっと小さなことをしたいかもしれません。

于 2013-03-03T16:13:05.797 に答える