Je viens de commencer à travailler avec OpenGL ES dans Android mais je suppose que cela pourrait aussi aller pour d'autres plates-formes mobiles qui utilisent OpenGL ES. J'ai suivi quelques tutoriels pour commencer, mais j'ai l'impression qu'il y a plusieurs choses qui me manquent.Quelles sont les bonnes pratiques OpenGL ES 1.x?
Par exemple, est-ce une bonne pratique que des objets se dessinent individuellement? J'ai un objet cube qui se dessine, alors j'ai un objet "panel" qui est un tableau de 10x10 cubes, et enfin un autre objet qui consiste en des panneaux pour créer un cube comme un objet. J'ai 7500 cubes qui doivent être dessinés, bien que chacun soit très "petit". Voici ce que la fonction de dessin ressemble à:
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);
}
Existe-t-il d'autres choses que l'on doit éviter lors de traiter avec OpenGL ES?
Edit: Une autre chose que je me suis demandé, est-il une bonne pratique pour réduire le nombre d'appels à certaines méthodes, telles que
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glDisable(GL10.GL_CULL_FACE);
Ceci est appelé pour chaque objet quand il est dessiné, est-il une nécessité ou Peut-il être appelé une fois dans mon objet le plus élevé une fois?
aussi:
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
Je me rends compte que activation et la désactivation peut être nécessaire en fonction de la situation, mais si elle peut être évitée, ce ne nuira pas quoi que ce soit?
Vous ne pouvez pas appeler gl.glDrawElements après avoir parcouru chaque objet en boucle? – Mikhail
Il peut être possible en ajoutant tous les sommets et les index dans un tableau? Je ne suis pas tout à fait sûr mais parce que glDrawElements vous oblige à le nourrir les indices de chaque triangle pour dessiner vous auriez besoin de les regrouper tous ensemble. –