¿Cómo ensambla OpenGL-ES 2 primitivas?

Dos cosas sobre las que estoy bastante confundido.

1) OpenGL ES 2.0 crea primitivas antes de que se invoque el sombreador de vértices. ¿Por qué, entonces, no proporciona automáticamente el sombreador de vértices la position del vértice?

2) OpenGL ES 2.0 es compatible con glDrawElements() , pero no es compatible con glEnableClientState() o GL_VERTEX_ARRAY , entonces, ¿cómo puede usarse esta llamada para build primitivas?

NOTA: ¡esto es OpenGL ES 2.0, NO es OpenGL normal!

¡Gracias!

Resolución:

Creo que mi confusión se debió a la variable incorporada gl_Vertex que algunas versiones de GLSL admiten (según algunas fonts, no pude encontrar esto en la documentation oficial en http://www.opengl.org/sdk/docs/manglsl / ) que le proporciona la position del vector proporcionado al command de dibujo. Esto no está presente en GL ES. Además, mi código no funcionaba, y como GLSL puede ser difícil de depurar, no tenía idea de lo que estaba sucediendo 🙂

En este caso, usar los attributes de los vértices y pasar la location del espacio model de los vértices y mi matriz de transformación me permite transformar los vértices correctamente.

1: Los primitivos no se "crean" antes de que se invoque el sombreador de vértices. El ensamblaje primitivo es una parte de la tubería después de que se ejecuta el sombreador de vértices. Usando el parámetro pasado a glDraw *, los grupos de datos de vértice emitidos por el sombreador de vértices se usan para crear primitivas, que luego se recortan, seleccionan y rasterizan.

No hay ningún atributo de "position del vértice". Eso es porque los sombreadores de vértices son código arbitrario . Toman los attributes que los quieran, y esos attributes tienen el significado que su código desea que tengan. Si desea un valor de position como atributo, asígnele un nombre en su sombreador.

Se requiere un sombreador de vértices para generar una position en el espacio de clip, pero cómo el sombreador de vértices crea que los datos dependen del sombreador. Podría hacer algunas transformaciones de matriz en un atributo, que es el método típico. Pero también podría hacer cosas más arbitrarias. Dependiendo de las extensiones disponibles para usted en su implementación de ES 2.0, podría get datos de una textura para calcular la position. Podría usar una function de ruido Perlin para generar la altura para un map de altura. Etcétera.

2: Las funciones que está buscando son glEnableVertexAttribArrays y glDisableVertexAttribArrays .

esto es OpenGL ES 2.0, ¡NO es OpenGL normal!

Puede que sea así, ya que nada de lo que ha preguntado es diferente entre el escritorio GL y GL-ES 2.0.

2) Debes proporcionar vértices usando glVertexAttribPointer (). Puede almacenar vértices en la memory del sistema o en VBO.