Спасибо большое за очень хорошо написанный ответ. Это очень полезно.
помощь с пониманием VBOs. Я провел тонну исследований и нашел учебники по этому вопросу, но они все еще неясны для меня. У меня есть несколько вопросов:
Где должен быть создан VBO, и как мне его создать?
В настоящее время я использую код ниже для инициализации моих вершин и индексных буферов:
vertices = new float[]
{
p[0].x, p[0].y, 0.0f,
p[1].x, p[1].y, 0.0f,
p[2].x, p[2].y, 0.0f,
p[3].x, p[3].y, 0.0f,
};
// The order of vertex rendering for a quad
indices = new short[] {0, 1, 2, 0, 2, 3};
ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4);
bb.order(ByteOrder.nativeOrder());
vertexBuffer = bb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
ByteBuffer dlb = ByteBuffer.allocateDirect(indices.length * 2);
dlb.order(ByteOrder.nativeOrder());
drawListBuffer = dlb.asShortBuffer();
drawListBuffer.put(indices);
drawListBuffer.position(0);
Если я прав, это не создание VBO. Итак, если я хочу создать VBO, будет ли код для создания VBO идти сразу после кода, указанного выше? Если так, как это будет создано?
Кроме того, как VBO отображается и отображается на экране?
Отображается ли он так же, как при использовании массивов вершин и индексов? Если нет, каков процесс? В настоящее время я отрисовываю и рисую свои объекты, как показано в коде ниже:
GLES20.glUseProgram(GraphicTools.sp_SolidColor);
mPositionHandle =
GLES20.glGetAttribLocation(GraphicTools.sp_SolidColor, "vPosition");
GLES20.glEnableVertexAttribArray(mPositionHandle);
GLES20.glVertexAttribPointer(mPositionHandle, 3,
GLES20.GL_FLOAT, false,
0, vertexBuffer);
mtrxHandle = GLES20.glGetUniformLocation(GraphicTools.sp_SolidColor,
"uMVPMatrix");
GLES20.glUniformMatrix4fv(mtrxHandle, 1, false, m, 0);
GLES20.glDrawElements(GLES20.GL_TRIANGLES, indices.length,
GLES20.GL_UNSIGNED_SHORT, drawListBuffer);
GLES20.glDisableVertexAttribArray(mPositionHandle);
Если у вас есть какие-либо вопросы, дайте мне знать. Заранее спасибо.