你可以查看这个教程,基本上是做同样你想达到的,但是用方块而不是方块。它采用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),然后重复更新每个正方形的模型矩阵。
矩阵堆栈的概念是有意义的,如果你的方块之间有某种层次结构(例如,如果其中一个移动,左边的那个必须相应移动)。
你可以把它想象成一个由正方形构成的骨架。如果肩膀移动,手臂中的所有部分也会移动(手,手指等)。 您可以使用矩阵堆栈来模拟。你可以用你所有的方格创建某种树,这样每个方格都有一个“后代”列表,这些列表将会应用与父代相同的变换。那么你可以递归渲染所有的方块像:
- 应用变换的平方根(S)
- 推入队列变换
- 调用相同的渲染功能,为每一个孩子
- 每孩子在读队列顶部的矩阵,通过自身的变革乘以 它,推动队列中的新的矩阵和 调用孩子
- 后,每个孩子弹出他们
0123推前矩阵
使用glmath是很容易的,你只需要创建一个队列:矩阵(STD向量在这种情况下):
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之前更新着色器中每个孩子的模型矩阵。
这基本上是我试图做的。他们实际上从顶点缓冲区执行所有操作。他们实际上并不通过翻译来放置每个单独的立方体 –
我需要一个每帧进行多次翻译的例子。我试图拆开AndEngine,因为他们正在这样做,但我不熟悉的抽象层和OpenGL层对我来说太过分了。他们在那里有一个矩阵推/拉的实现,我只是不明白它在做什么。 –
@seanwagner我用一些伪代码更新了答案 – Esparver