studio programacion móviles lineas figuras ejemplos dibujar desarrollo curso cubo aplicaciones opengl graphics rendering vertex

opengl - móviles - manual de programacion android pdf



¿Cómo sabe glDrawArrays qué dibujar? (2)

DrawArrays toma datos de ARRAY_BUFFER .

Los datos se ''asignan'' de acuerdo con su configuración en glVertexAttribPointer que le dice cuál es la definición de su vértice.

En su ejemplo, tiene un attrib de vértices (glEnableVertexAttribArray) en la posición 0 (normalmente puede tener 16 vértices attribs, cada 4 flotantes). Luego dices que cada attrib se obtendrá leyendo 3 GL_FLOATS desde el buffer comenzando desde la posición 0.

excelente tutorial aquí: http://www.arcsynthesis.org/gltut/Basics/Tut02%20Vertex%20Attributes.html

Estoy siguiendo algunos tutoriales iniciales de OpenGL, y estoy un poco confundido acerca de este fragmento de código:

glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObject); //Bind GL_ARRAY_BUFFER to our handle glEnableVertexAttribArray(0); //? glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); //Information about the array, 3 points for each vertex, using the float type, don''t normalize, no stepping, and an offset of 0. I don''t know what the first parameter does however, and how does this function know which array to deal with (does it always assume we''re talking about GL_ARRAY_BUFFER? glDrawArrays(GL_POINTS, 0, 1); //Draw the vertices, once again how does this know which vertices to draw? (Does it always use the ones in GL_ARRAY_BUFFER) glDisableVertexAttribArray(0); //? glBindBuffer(GL_ARRAY_BUFFER, 0); //Unbind

No entiendo cómo glDrawArrays sabe qué vértices dibujar, y qué es todo lo que se puede hacer con glEnableVertexAttribArray . ¿Podría alguien arrojar algo de luz sobre la situación?


La llamada a glBindBuffer le dice a OpenGL que use vertexBufferObject cuando necesite el GL_ARRAY_BUFFER .

glEnableVertexAttribArray significa que desea que OpenGL use matrices de atributos de vértices; sin esta llamada, los datos que usted suministre serán ignorados.

glVertexAttribPointer , como dijiste, le dice a OpenGL qué hacer con los datos de matriz proporcionados, ya que OpenGL no sabe de forma inherente en qué formato estarán esos datos.

glDrawArrays usa todos los datos anteriores para dibujar puntos.

Recuerde que OpenGL es una gran máquina de estado. La mayoría de las llamadas a funciones OpenGL modifican un estado global al que no se puede acceder directamente. Es por eso que el código termina con glDisableVertexAttribArray y glBindBuffer(..., 0) : tiene que volver a poner ese estado global cuando haya terminado de usarlo.