0

私は LWJGL を通じて OpenGL を学んでいるので、LWJGL wiki のチュートリアルを実行してきました。具体的には、これ

私の問題は、そのコード、呼び出しの呼び出し、関数の関数を複製したという事実にもかかわらず、2 つの頂点属性ポインターを切り替える必要があることです (したがって、コードは次のようになります。

GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, Vertex.sizeInBytes, 
    // Put the colors in attribute list 1
GL20.glVertexAttribPointer(0, 4, GL11.GL_FLOAT, false, Vertex.sizeInBytes,
    Vertex.elementBytes * 4);

位置インデックスが 1 でカラー インデックスが 0 になるように切り替えると、予想どおり、適切なグラデーション レンダリングが作成されます。ただし、インデックスを切り替えて実行すると(動作するはずだと思う方法で、次のようになります:

紛らわしい狂気

明らかに、このレンダリングをしばらく調べた後、位置と色のデータが切り替えられたため、インデックス番号を切り替えることで問題は完全に解決されましたが、すべてを正しく実行したと確信しています。コードの何が問題になっていますか? なんでこんなヤツなの?

4

1 に答える 1

1

そのような属性IDをハードコーディングするべきではなく、それらが適切なシェーダー属性にリンクされることを期待するだけです。

シェーダー変数をID番号にマップできるように、glBindAttribLocation(glLinkProgramの前)またはglGetAttribLocationのいずれかを使用する必要があります。

于 2012-11-01T23:40:30.940 に答える