あなたはこのチュートリアルをチェックすることができます、基本的にあなたが達成したいのと同じことをしていますが、正方形の代わりに立方体を使っています。VBOも使用します。
http://www.learnopengles.com/android-lesson-seven-an-introduction-to-vertex-buffer-objects-vbos/
マトリックスについては、OpenGL ES 2.0では、マトリックス関連の関数はもうありませんが、同じ(およびはるかに)機能するglmathライブラリを使用できます。
http://glm.g-truc.net/
これはヘッダーライブラリなので、どこかにコピーして、必要な場所に含めるだけです。
あなたの目的を完全に理解しているかどうかはわかりませんが、(VBOを使用して)1つの正方形のデータをグラフィックカードにコピーしてから、すべての正方形のモデル行列を繰り返し更新できると思います。
マトリックススタックの概念は、正方形の間に何らかの階層がある場合に意味があります(たとえば、正方形の1つが移動した場合、左側の正方形もそれに応じて移動する必要があります)。
あなたはそれを正方形で作られた骸骨として想像することができます。肩が動くと、腕のすべての部分(手、指など)も動きます。マトリックススタックを使用して、これをエミュレートできます。すべての正方形である種のツリーを作成して、すべての正方形に「子孫」のリストを作成できます。これにより、親と同じ変換が適用されます。次に、次のようにすべての正方形を再帰的にレンダリングできます。
- ルートスクエアに変換を適用します
- 変換をキューにプッシュします
- すべての子に対して同じレンダリング関数を呼び出します
- すべての子は、キューの一番上にあるマトリックスを読み取り、それを独自の変換で乗算し、新しいマトリックスをキューにプッシュして、子を呼び出します
- その後、すべての子が前にプッシュしたマトリックスをポップアウトします
glmathの使用は非常に簡単で、行列のキュー(この場合はstd:vector)を作成する必要があります。
std::vector<glm::mat4> matrixStack;
そして、すべての子供のために:
glm::mat4 modelMatrix = matrixStack.back();
glm::mat4 nodeTransform = /*apply your transform here*/
glm::mat4 new = modelMatrix * nodeTransform;
matrixStack.push_back(new);
/*Pass in the new matrix to the shader and call to glDrawArrays or whatever to render your square*/
for (every child) {
render();
}
matrixStack.pop_back();
描画部分については、glDrawArraysを呼び出す前に、頂点配列を正方形の頂点にバインドし、すべての子のシェーダーでモデル行列を更新できると思います。