2

OpenGL で長方形のテクスチャを使用しようとしています。高さがテクスチャの幅と等しい場合、すべてがきれいに見えますが、高さが幅と異なる場合、テクスチャはゆがんで見えます。

私の表示機能は(hおよびw画像の高さと幅を格納するグローバルです):

描画される画像のサイズは関係ありません。実際のポリゴン サイズに関係なく歪んでいます。

void display(void)
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glEnable(GL_TEXTURE_2D);
   glEnable(GL_BLEND);
   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
   glBindTexture(GL_TEXTURE_2D, texName);
   glTranslatef(-2.0f,-2.0f,0.0f);
   glScalef(1.0f/128.0f,1.0f/128.0f,1.0f);
   glBegin(GL_QUADS);
   glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
   glTexCoord2f(0.0, 1.0); glVertex3f(0.0, w, 0.0);
   glTexCoord2f(1.0, 1.0); glVertex3f(h, w, 0.0);
   glTexCoord2f(1.0, 0.0); glVertex3f(h, 0.0, 0.0);

   // Will be distorted also with the following:
   /*glScalef(1.0f/128.0f,1.0f/128.0f,1.0f);
   glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
   glTexCoord2f(0.0, 1.0); glVertex3f(0.0, h, 0.0);
   glTexCoord2f(1.0, 1.0); glVertex3f(w, h, 0.0);
   glTexCoord2f(1.0, 0.0); glVertex3f(w, 0.0, 0.0);*/

   glEnd();
   glFlush();
   glDisable(GL_TEXTURE_2D);
}

私はテクスチャをロードしています:

void *data = LoadBMP("c:\\dev\\64x128_face.bmp");
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

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

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
               GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
               GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w,
            h, 0, GL_RGBA, GL_UNSIGNED_BYTE,
            data);

正方形のテクスチャ イメージを読み込んでいる64x64と、問題なく表示されます。しかし、長方形のテクスチャ イメージをロードすると、イメージが歪んで見えます。

OpenGL はどのように長方形の POT テクスチャをサポートしていますか? コードの何が問題になっていますか?

4

2 に答える 2

0

rectイメージは64x128ですが、次のコマンドを使用してレンダリングします。

   glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
   glTexCoord2f(0.0, 1.0); glVertex3f(0.0, w, 0.0);
   glTexCoord2f(1.0, 1.0); glVertex3f(h, w, 0.0);
   glTexCoord2f(1.0, 0.0); glVertex3f(h, 0.0, 0.0);

ここで、hは高さ(= 128)、w(= 64)は幅です。ただし、高さをx(幅)に配置し、幅をy(高さ)に配置しました。代わりにこれを試してみてください:

   glTexCoord2f(0.0, 0.0); glVertex3f(0.0, 0.0, 0.0);
   glTexCoord2f(0.0, 1.0); glVertex3f(0.0, h, 0.0);
   glTexCoord2f(1.0, 1.0); glVertex3f(w, h, 0.0);
   glTexCoord2f(1.0, 0.0); glVertex3f(w, 0.0, 0.0);
于 2010-08-09T10:21:42.910 に答える
0

glTexImage2D()でhwに2 の累乗以外の値を使用する前に、おそらくGL_ARB_texture_non_power_of_two拡張機能のサポートを確認する必要があります。これは、任意の高さと幅の指定がこの拡張機能でのみ有効であるためです。

于 2010-08-14T09:45:26.127 に答える