Android 用の Rajawali ライブラリを使用して、シーンにいくつかの基本的な 3D オブジェクトを描画しようとしています。サンプルの 2000 プレーンがあり、大量の頂点を 1 つのシェーダーで非常に「安く」レンダリングする方法を示しています。頂点の配列をシェーダーに渡して描画できます。
このサンプルをアップグレードして、いくつかの頂点を個別に移動したいと考えています。
glBufferSubData を試しましたが、シーンで何も変更できません。私が見つけた1つの方法は、データを変更してバッファを再作成することですが、必要なデータのみを変更する簡単な方法があることを願っています.
たとえば、既に作成されバインドされているバッファーからいくつかの位置を変更したいだけです。
位置の初期化
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に渡す必要がありますが、方法がわかりません)。