質問を大幅に変更する以下の編集を参照してください。
オリジナル:
Xcode4.1を使用してiOS4でOpenGLES2.0を使用して要素をレンダリングする際に問題が発生しました。
glDrawElementsを使用すると、問題なく問題なく表示されます。
glDrawElements(GL_TRIANGLES, indicesSizeAll/sizeof(IndicesAll[0]), GL_UNSIGNED_SHORT, 0);
しかし、同等のglDrawRangeElementsを使用すると、さまざまな問題が発生します。
glDrawRangeElements(GL_TRIANGLES, 0, (indicesSizeAll/sizeof(IndicesAll[0]))-1, indicesSizeAll/sizeof(IndicesAll[0]), GL_UNSIGNED_SHORT, 0);
次のビルド警告が表示されます。
Semantic Issue: Implicit declaration of function 'glDrawRangeElements' is invalid in C99
および実行中の次のエラー:
Program received signal: "EXC_BAD_ACCESS"
この関数プロトタイプを含めました:
extern void glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices);
これはビルド警告を取り除きましたが、まだ実行エラーがあります。
この問題を解決するために何をすべきか本当にわかりません。私は一歩ずつ物事を進めて表示するようにしていますが、今後はglDrawRangeElementsを使用する必要があると考えているので、それを機能させようとしています。誰かが私のためにいくつかのガイダンスを持っていますか?
編集:
それは私の注意を引いた:
DrawRangeElementsはOpenGLES1.1または2.0には存在しないため、システムヘッダーには存在しません。代わりにglDrawElementsを呼び出す必要があります。
これにより、 glDrawRangeElementsで問題が解決すると思っていた以前の状況に戻ることができます。
つまり、各バッファーに異なる回転を適用したいので、すべてをレンダリングするために複数のバッファーを使用する必要があります。
[modelView rotateBy:CC3VectorMake(x, y, z)];
glUniformMatrix4fv(_modelViewUniform, 1, 0, modelView.glMatrix);
2つの異なるバッファを設定しました。
glGenBuffers(1, &vertexBufferA);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferA);
glBufferData(GL_ARRAY_BUFFER, verticesSizeA, VerticesA, GL_STATIC_DRAW);
glGenBuffers(1, &indexBufferA);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferA);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesSizeA, IndicesA, GL_STATIC_DRAW);
--------------------
glGenBuffers(1, &vertexBufferZ);
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferZ);
glBufferData(GL_ARRAY_BUFFER, verticesSizeZ, VerticesZ, GL_STATIC_DRAW);
glGenBuffers(1, &indexBufferZ);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferZ);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesSizeZ, IndicesZ, GL_STATIC_DRAW);
次に、これらの要素をレンダリングする場合:
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferA);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferA);
glDrawElements(GL_TRIANGLES, indicesSizeA/sizeof(IndicesA[0]), GL_UNSIGNED_SHORT, 0);
--------------------
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferZ);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferZ);
glDrawElements(GL_TRIANGLES, indicesSizeZ/sizeof(IndicesZ[0]), GL_UNSIGNED_SHORT, 0);
glDrawElementsを1回呼び出すだけで問題なくレンダリングされますが、バッファーごとに呼び出すと、2回目の呼び出しでのみレンダリングが行われます。
ここで何が欠けているのか正確にはわかりません。私はOpenGL全体に不慣れであり、学習しながら進んでいきます。
ポインタや説明に感謝します。