Я только начал работать с OpenGL ES в Android, но я полагаю, что это может пойти и на другие мобильные платформы, использующие OpenGL ES. Я прошел несколько уроков, чтобы начать, но я чувствую, что есть разные вещи, которые мне не хватает.
Например, хорошо ли, когда объекты рисуют сами по себе? У меня есть объект куба, который рисует сам, затем у меня есть объект «панель», представляющий собой массив кубиков 10х10, и, наконец, еще один объект, который состоит из панелей для создания объекта, подобного кубу. У меня есть 7500 кубов, которые нужно нарисовать, хотя каждый из них очень «маленький». Вот как выглядит функция рисования:
public void draw(GL10 gl) {
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verticesBuffer);
gl.glColor4f(rgba[0], rgba[1], rgba[2], rgba[3]);
gl.glTranslatef(x, y, z);
gl.glRotatef(rx, 1, 0, 0);
gl.glRotatef(ry, 0, 1, 0);
gl.glRotatef(rz, 0, 0, 1);
gl.glDrawElements(GL10.GL_TRIANGLES, numOfIndices,
GL10.GL_UNSIGNED_SHORT, indicesBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
}
Есть ли что-то, чего следует избегать при работе с OpenGL ES?
Редактировать: Еще одна вещь, которая меня интересует, это хорошая практика, чтобы уменьшить количество вызовов определенных методов, таких как
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glDisable(GL10.GL_CULL_FACE);
Это вызывается для каждого объекта при рисовании, является ли это необходимостью или его можно вызвать один раз в моем самом верхнем объекте один раз?
Также:
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
Я понимаю, что включение и отключение могут быть необходимы в зависимости от ситуации, но если этого можно избежать, это не окажет отрицательного влияния на что-либо?