2

openGL のテクスチャ マッピングに頭がおかしくなりそうです。正しいものをマップすることは決してありません。見てください。

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

glBegin(GL_QUADS);
    glTexCoord2f(1,0); 
    glVertex2f(210, 638);   //Top-Left
    glTexCoord2f(1,1);
    glVertex2f(210, 438);   //Top-Right
    glTexCoord2f(0,1); 
    glVertex2f(10, 438);    //Bottom-Right
    glTexCoord2f(0,0);
    glVertex2f(10, 638);    //Bottom-Left
glEnd();
glDisable(GL_TEXTURE_2D);

このコードの出力画像は次のようになります。 ここに画像の説明を入力

しかし、私はそれが次のようになりたいです: ここに画像の説明を入力

テクスチャを別のものに変更すると、正しくマップされますが、明らかにこれではマップされません。これはなぜだと思いますか?

4

2 に答える 2

4

他のテクスチャが機能する場合、このテクスチャは奇妙なサイズまたは異なる形式であり、必要なパディングを観察せずにロードされている可能性があります。

テクスチャ形式が偶数のピクセルである必要があるか、他の倍数に丸められる必要があるのは一般的です。

テクスチャに対する 45 度の傾斜も、この種の問題を示しています。これは、多くの場合、パイプラインのある時点で余分なピクセルがすべてのラインで読み取られる (またはスキップされる) ことが原因で発生するためです。

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

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

4バイトに位置合わせできないテクスチャを使用している場合は、いくつかの点に注意する必要があります。1つは、正しいピクセルパックを設定し、位置合わせをアンパックすることです。

glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

詳細については、こちらをご覧ください。

于 2013-01-14T10:53:38.177 に答える