Pregunta

Hasta ahora solo he usado glDrawArrays y me gustaría pasar a usar un búfer de índice y triángulos indexados. Estoy dibujando un objeto algo complicado con coords de textura, normales y coords de vértice. Todos estos datos se reúnen en un único búfer de vértices intercalados y se dibujan utilizando llamadas similares a (suponiendo que todo el proceso se realice correctamente):

glVertexPointer( 3, GL_FLOAT, 22, (char*)m_vertexData );
glNormalPointer( GL_SHORT, 22, (char*)m_vertexData+(12) );
glTexCoordPointer( 2, GL_SHORT, 22, (char*)m_vertexData+(18) );
glDrawElements(GL_TRIANGLES, m_numTriangles, GL_UNSIGNED_SHORT, m_indexData );

¿Esto permite que m_indexData también se intercale con los índices de mis normales y coordes de textura, así como la matriz de índice de posición estándar? ¿O asume una lista lineal única de inidices que se aplican a todo el formato de vértice (POS, NOR, TEX)? Si esto último es cierto, ¿cómo es posible representar el mismo vértice con diferentes acordes o normales de textura?

Supongo que esta pregunta también podría reformularse: si tuviera 3 listas indexadas separadas (POS, NOR, TEX) en las que los últimos 2 no se pueden reorganizar para compartir la misma lista de índices que la primera, ¿cuál es la mejor manera de haz eso.

¿Fue útil?

Solución

No puede tener diferentes índices para las diferentes listas. Cuando especifique glArrayElement (3) , OpenGL tomará el tercer elemento de cada lista.
Lo que puede hacer es jugar con el puntero que especifique, ya que, en esencia, el lugar de la lista al que finalmente se accede es el desplazamiento del puntero desde el inicio de la lista más el índice que especifique. Esto es útil si tiene un desplazamiento constante entre las listas. Si las listas son solo una permutación aleatoria, entonces este tipo de juego para cada vértice probablemente será tan costoso como el simple uso de glVertex3fv () , glNormal3fv () y glTexCoord3fv()

Otros consejos

Tengo problemas similares al intentar hacer lo mismo en Direct3D 9.0

Para mi implementación de OpenGL 3 fue bastante fácil, y mi código fuente está disponible en línea si puede ayudarte ... https://github.com/RobertBColton /enigma-dev/blob/master/ENIGMAsystem/SHELL/Graphics_Systems/OpenGL3/GL3model.cpp

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top