【发布时间】:2023-03-24 10:16:01
【问题描述】:
我正在使用 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);
然后我会更新 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();
就高效和最佳实践而言,在这种情况下最好的做法是什么。
【问题讨论】: