Я пытаюсь использовать библиотеку Rajawali для Android, чтобы нарисовать некоторые основные 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, но не знаю как).