1

最近、私のテクスチャがおかしくなりました。マップしようとした最後の2つのテクスチャは、次の図のように表示されます。最初の写真のように見せたいのですが、何をしても後者のように見えるように主張しています。テキストは無視してください。テクスチャとは関係ありません。

ここに画像の説明を入力してください ここに画像の説明を入力してください

openGLウィンドウ処理にGLUTを使用しており、GLMobjローダーのtgaリーダーを使用しています。以前何度もリーダーを使っていましたが、問題ありませんでした。テクスチャをロードする最後の2回の試行で機能しなくなりました。関連するコードは次のとおりです。

Texture onScreenTexture;


if (LoadTGA(&onScreenTexture, "back.tga")) 
    { 
        glGenTextures(1, &onScreenTexture.texID);
        glBindTexture(GL_TEXTURE_2D, onScreenTexture.texID);
        glTexImage2D(GL_TEXTURE_2D, 0, onScreenTexture.bpp / 8, onScreenTexture.width, onScreenTexture.height, 0, onScreenTexture.type, GL_UNSIGNED_BYTE, onScreenTexture.imageData);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

        if (onScreenTexture.imageData) 
        {
            free(onScreenTexture.imageData);
        }
    }

glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, onScreenTexture.texID);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

    glBegin(GL_QUADS);
        glTexCoord2f(0,0); glVertex2f(10.0, 10.0);
        glTexCoord2f(0,1); glVertex2f(260, 10.0);
        glTexCoord2f(1,1); glVertex2f(260, 110);
        glTexCoord2f(1,0); glVertex2f(10.0, 110);
    glEnd();
    glDisable(GL_TEXTURE_2D);
4

1 に答える 1

3

これは、幅/高さの比率とは関係ありません(ただし、90度回転してレンダリングしているように見えますが、追加のストレッチが発生します)が、ピクセルの行のパッキングと関係があります。これは、対角線のパターンから明らかであり、プログレッシブアライメントの問題を示しています。また、色付きのストライプは、RGBデータが各ラインで異なる方法でアライメントされていないことを示しています。

あなたの場合、行のパディングがないTGAをロードしていますが、デフォルトでピクセルの行が4バイトの倍数にパディングされることを想定しているGLに渡します。

作業中のテクスチャは、おそらく24ビットではなく32ビットであるか、幅が4ピクセルの倍数であり、どちらも自然な配置になります。

これに対する可能な修正は次のとおりです。

  • パディングがないように、テクスチャの寸法を変更します。
  • パディングがGLが期待するものと一致するように、テクスチャの読み込みを変更します
  • (たとえば)を使用して、テクスチャがどのようにパックされているかをGLに伝えますglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
于 2013-01-16T09:39:47.740 に答える