2011-12-26 11 views
0

テクスチャを単純な四角形にレンダリングするコードを作成しようとしていますが、それを動作させるには多くの問題がありました。私は、テクスチャマッピングhereのサンプルソースコードをダウンロードし、それをコンパイルして、シリンダに細かくテクスチャマッピングするようです。次に、私のコードのいくつかを追加して、正方形にテクスチャをレンダリングするかどうかを確認しましたが、シリンダーに表示されているようなチェッカーボードの代わりに赤と黒の中間にある単色のテクスチャです。ここで私が追加されたコードは、右の最初のパス上のgluCylinderを呼び出した後、次のとおりです。クォードのテクスチャマッピングが機能しない

glBegin(GL_QUADS); 
glTexCoord2f(0, 0); 
glVertex2f(-1, -1); 
glTexCoord2f(1,0); 
glVertex2f(1, -1); 
glTexCoord2f(1, 1); 
glVertex2f(1, 1); 
glTexCoord2f(0,1); 
glVertex2f(-1, 1); 
glEnd(); 

はテクスチャがシリンダー上ではなく、私のクワッド上で正常にレンダリングされない理由はありますか?

答えて

5

このコード例では、自動テクスチャ座標の生成が有効になっているため、glTexCoord2f呼び出しが無視されています。自動生成はZ平面に投影されています。クワッドはYプレーンなので、基本的にクオリティの1ピクセルをクワッド全体に伸ばしています。

glBeginの前に自動テクスチャの生成を無効にし、glEndの後で再び有効にします。

すなわち:

glDisable(GL_TEXTURE_GEN_S); 
glDisable(GL_TEXTURE_GEN_T); 

glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); 
    glVertex2f(-1, -1); 
    glTexCoord2f(1,0); 
    glVertex2f(1, -1); 
    glTexCoord2f(1, 1); 
    glVertex2f(1, 1); 
    glTexCoord2f(0,1); 
    glVertex2f(-1, 1); 
glEnd(); 

glEnable (GL_TEXTURE_GEN_S); 
glEnable (GL_TEXTURE_GEN_T); 

また、あなたはY平面に投影する自動テクスチャ生成を設定することができ、そしてglTexCoord2f呼び出しを省略して、設定が完了したときにバックZに設定します。

float zPlane[4] = {0., 0., 1., 0.}; 
float yPlane[4] = {0., 1., 0., 0.}; 
glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane); 

glBegin(GL_QUADS); 
    glVertex2f(-1, -1); 
    glVertex2f(1, -1); 
    glVertex2f(1, 1); 
    glVertex2f(-1, 1); 
glEnd(); 

glTexGenfv (GL_T, GL_OBJECT_PLANE, zPlane); 
+0

それでした!ありがとう、あなたはOpenGLのテクスチャマッピングについて教えてくれました! – eyebrowsoffire