フラット プレーンとインデックス バッファー、または画像にインデックスがマークされた EBO があります。
今私が電話した場合:
glDrawElementsBaseVertex(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0, 0);
私はこれを得る:
これはわかります。さらに、これを行うと:
glDrawElementsBaseVertex(GL_TRIANGLES, 9, GL_UNSIGNED_INT, 0, 0);
これも一理あります。しかし、他のパラメーターのいずれかを変更すると、私の理解は完全に崩壊します。私がこれを行う場合:
glDrawElementsBaseVertex(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0, 3);
次のようになります。
したがって、引数 3 を basevertex 引数 (最後の引数) に渡すことにより、インデックスの 3 つの位置からではなく、インデックスの 3 つの三角形からでもなく、インデックスの使用が開始されますが、約 6 つの三角形、またはより正確には開始されます。インデックス番号 18. この動作が理解できません。
また、これらの関数の「インデックス」の引数について矛盾する意味を読みました。
void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);
void glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, GLvoid *indices, GLint basevertex);
インデックス ポインターを使用すると、ポインターを提供することでインデックス バッファーを直接参照できるようになることを読みました。それが null の場合、インデックス バッファーは現在バインドされている GL_ELEMENT_ARRAY_BUFFER から取得されます。ただし、あるバージョンのドキュメントからは、次のように書かれています。
インデックスの読み取りを開始する GL_ELEMENT_ARRAY_BUFFER にバインドされたバッファーへのバイト オフセット (ポインター型にキャスト) を指定します。
そして、別のバージョンでは次のように述べています。
インデックスが格納されている場所へのポインターを指定します。
最後から 2 番目の引数 (インデックス) を (void*)3 として glDrawElementsBaseVertex を呼び出すと、最初の三角形が赤く描画されます。(void*)6 を指定すると、三角形が強調表示されません。(void*)9 を指定すると、2 番目の三角形が強調表示されます。
私はこれを理解することはできません。この引数 index は、現在バインドされている要素配列バッファーを使用する代わりに、使用したいインデックスへのオプションのポインターではないということですか?