実際には、いくつかの配列/バッファを使用して、頂点データを位置、色などに分離する通常の方法です。
前回ES2.0に接触したのは、WebGLのコンテキストでした(仕様は少し異なりますが、最終的にはES 2.0に基づいています)。
基本的に行われるのは、を使用して個別のバッファにデータを書き込むことです。
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(float), positions, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, colorBuffer);
glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), colors, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
...
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ushort), indices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
この場合、位置と色は頂点データを含むフロート配列であり、インデックスは符号なしショートとしてインデックスを含みます。
このデータをレンダリングするには、シェーダーへのバッファーと属性ポインターを使用します。
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(vertexPositionAttribute, 3, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, colorBuffer);
glVertexAttribPointer(vertexColorAttribute, 4, GL_FLOAT, false, 0, 0);
最後に、インデックスバッファをバインドします。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
レンダリング:
glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_SHORT, 0);
属性を取得するには:
glUseProgram(shaderProgram);
vertexPositionAttribute= glGetAttribLocation(shaderProgram, "vertexPosition");
glEnableVertexAttribArray(vertexPositionAttribute);
vertexColorAttribute = glGetAttribLocation(shaderProgram, "vertexColor");
glEnableVertexAttribArray(vertexColorAttribute );
...
カスタムシェーダー(固定機能を使用)がない場合は、使用できる可能性があります
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexPointer(3, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, colorBuffer);
glColorPointer(4, GL_FLOAT, false, 0, 0);
代わりは。ただし、古くなっているので(ES 2.0で利用できる場合)、これには反対することをお勧めします。それでも使用したい場合は、バッファビジネス全体をスキップして使用できます
glVertexPointer(3, GL_FLOAT, false, 0, positions);
glColorPointer(4, GL_FLOAT, false, 0, colors);
と
glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_SHORT, indices);
それがあまり混乱せず、少し役立つことを願っています。さらに読むために、OpenGLを対象としていますが、Neheチュートリアルをお勧めします。