0

だから私は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 を呼び出すと、すべてが緑色に着色されるため、画像が表示されないと思います。これはシェーダーの観点からは完全に理にかなっていますが、私はこのアプローチを理解していません。シェーダーで行ったように、シェーダーなしで古い方法を使用してどのように機能させるのですか?

4

0 に答える 0