我正在尝试使用Android的Rajawali库在场景中绘制一些基本的3D对象。
有一个2000平面的示例,展示了如何通过一个着色器“廉价”地渲染海量的顶点。我可以将顶点数组传递给着色器并进行绘制。
我想升级这个示例,并使一些顶点相互独立地移动。
我已经尝试过glBufferSubData,但是无法在场景上改变任何内容。我找到的其中一种方法是更改数据并重新创建缓冲区,但我希望有一种更简单的方法只更改必要的数据。
例如,我只想更改已创建和绑定的缓冲区中的一些位置。
初始化位置
float[] planePositions = new float[numVertices * 3];
....
创建缓冲区
mGeometry.createBuffer(mPlanePositionsBufferInfo, BufferType.FLOAT_BUFFER, mPlanePositions, GLES20.GL_ARRAY_BUFFER);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
设置位置
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, planePosBufferHandle);
GLES20.glEnableVertexAttribArray(maPlanePositionHandle);
fix.android.opengl.GLES20.glVertexAttribPointer(maPlanePositionHandle, 3, GLES20.GL_FLOAT,
false, 0, 0);
如何修改例如第一个平面的第一个顶点的位置? (planePositions[0] = a;planePositions[1] = b; planePositions[1] = c... 现在我需要将这个已修改的数组传递给OpenGL,但不知道该怎么做。