だから私はOpenGLとテクスチャリングにかなり慣れていません。イメージをマップしようとしているプリミティブ (2 つの三角形) のような平面があります。私はこれを2つの方法で行いました。sampler2d ユニフォームを使用し、texture2d を呼び出して画像のピクセルをプリミティブにマップする Fragment シェーダーを作成した最初の方法は、次のように正常に動作します。
私が取った2番目のアプローチを修正
して、glEnableを使用し、シェーダーを使用しなかったため、画像は次のようになりました。
このコード
の多くは作業プロジェクトであるため、多くを投稿することはできませんが、基本的には次のようにレンダリングしています。
void draw()
{
glColor4f(0.0, 1.0, 0.0, 1.0)
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEX_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, id);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
// then draw arrays....
// disable client states
}
緑が私の glColor 呼び出しから来ていることは知っていますが、ここで舞台裏で何が起こっているのかを理解したいと思いますか? レンダリングする前に glColor を呼び出すと、すべてが緑色に着色されるため、画像が表示されないと思います。これはシェーダーの観点からは完全に理にかなっていますが、私はこのアプローチを理解していません。シェーダーで行ったように、シェーダーなしで古い方法を使用してどのように機能させるのですか?