use*_*404 5 graphics opengl-es
我正在使用openGL ES为Android创建一个应用程序.我试图在2D中绘制许多在屏幕上反弹的移动精灵.
让我们考虑我在坐标100,100处有一个球.球图形是10px宽,因此我可以创建顶点boundingBox = {100,110,0, 110,110,0, 100,100,0, 110,100,0}
并在每个循环上执行以下onDrawFrame()
加载球纹理.
//for each ball object
FloatBuffer ballVertexBuffer = byteBuffer.asFloatBuffer();
ballVertexBuffer.put(ball.boundingBox);
ballVertexBuffer.position(0);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ballVertexBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0,4);
Run Code Online (Sandbox Code Playgroud)
然后我会更新boundingBox
阵列以在屏幕上移动球.
或者,在绘制顶点之前,我根本无法改变球bounding box
而是translatef()
球
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ballVertexBuffer);
gl.glPushMatrix();
gl.glTranslatef(ball.posX, ball.posY, 0);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0,4);
gl.glPopMatrix();
Run Code Online (Sandbox Code Playgroud)
在效率和最佳实践方面,最好的做法是什么.
绘图调用比更改数据要昂贵得多。此外,glTranslate 的效率远不如仅添加几个数字那么高效,毕竟它必须经过完整的 4\xc3\x974 矩阵乘法,即 64 次标量乘法和 16 次标量加法。
\n\n当然,最好的方法是使用某种形式的实例化。
\n