Android 在OpenGL ES 2中实现VBOs渲染精灵
我正在尝试在OpenGL中实现VBOs以提高渲染速度,虽然我理解总体概念,但我不确定如何在2D中使用精灵实现。我发现的所有实现似乎都是为了绘制一个三维模型,其中所有顶点都是相对固定的。然而,在2D游戏中,每个精灵都有自己的位置,因此也有自己的MVP矩阵 这似乎是如何做到的:Android 在OpenGL ES 2中实现VBOs渲染精灵,android,opengl-es-2.0,vbo,Android,Opengl Es 2.0,Vbo,我正在尝试在OpenGL中实现VBOs以提高渲染速度,虽然我理解总体概念,但我不确定如何在2D中使用精灵实现。我发现的所有实现似乎都是为了绘制一个三维模型,其中所有顶点都是相对固定的。然而,在2D游戏中,每个精灵都有自己的位置,因此也有自己的MVP矩阵 这似乎是如何做到的: Basic vertex shader: "uniform mat4 uMVPMatrix; \n" + "attribute vec4 vPosition;" + "a
Basic vertex shader:
"uniform mat4 uMVPMatrix; \n" +
"attribute vec4 vPosition;" +
"attribute vec2 texCoord;" +
"varying vec2 vTexCoord;" +
"void main() {" +
// matrix must be included as part of gl_Position
" gl_Position = uMVPMatrix * vPosition;" +
" vTexCoord = texCoord;" +
"}";
Drawing with VBOs (pseudocode)
1. Bind vertex/texture buffers
2. Load MVP matrix with glUniformMatrix4fv
3. Call glDrawArrays/glDrawElements to draw the all the vertices in one call
是否有一种简单的方法来扩展上述方法,以适应不断变化的MVP
两种可能的想法:
我决定使用选项2,但在开始工作时遇到了问题:常见的2d引擎所做的是提供基于树的渲染。一个节点有它的模型矩阵,并且有一些同时受父模型矩阵和它们自己的矩阵影响的子节点。在运行时,访问每个节点并将其渲染为将父矩阵和自己的矩阵合并为一个矩阵。除非渲染数千个节点(精灵),否则不必担心将如此多的矩阵传递到驱动程序内存的性能问题
编辑:您也可以有一种特定类型的节点,通常称为atlas,您可以在其中添加只受节点模型矩阵影响的预计算四边形(请参见或)。我可能会进一步研究这一点,但目前我决定在上面的帖子中采用选项2,从我目前的情况来看,这似乎是一个相当直接的进展。然而,正如我在编辑的文章中解释的那样,我遇到了问题。最好在这里发布一个新问题,并留下一个指向其他问题的链接。