texture - texturas en opengl ejemplos
Combinación de matrices de vértices con texturas en OpenGL (2)
Si entiendo correctamente su pregunta, hay una manera de deshacerse de tener que poner varias veces el mismo vértice en el vertexbuffer. Puede usar un buffer de índice y usar índices para especificar el mismo vértice. Esto puede acelerar el renderizado significativamente.
Estoy tratando de usar matrices de vértices para dibujar una malla razonablemente grande, que contiene una gran cantidad de vértices. Las texturas se han determinado a partir de estas y es bastante fácil dibujar en el modo inmediato a lo largo de las líneas de:
glBegin(GL_TRIANGLES) {
for ( int faceIdx = 0; faceIdx < nFaces; ++faceIdx )
glVertex3fv(&vertexArray[vIdx]);
glTexCoord2fv(&texCoord[vIdx++]);
glVertex3fv(&vertexArray[vIdx]);
glTexCoord2fv(&texCoord[vIdx++]);
glVertex3fv(&vertexArray[vIdx]);
glTexCoord2fv(&texCoord[vIdx++]);
}
}
glEnd();
Sin embargo, para legibilidad, velocidad y el resto, quiero usar matrices de vértices (con miras a pasar a VBO). ¿Hay alguna manera de moverse colocando un solo vértice en la matriz varias veces?
Según tengo entendido, en este momento es necesario especificar cada vértice de la malla tantas veces como aparezca en una cara de la malla, ya que cada vértice se identifica con múltiples coordenadas de textura (las texturas se capturan de una imagen del mundo real del objeto al que se aproxima la malla), es decir, mi arreglo de vértice / matriz de tex se lee como si lo hubiera llenado en modo inmediato.
¿Hay alguna forma de usar matrices de vértices, mientras se especifican las coordenadas de textura, sin usar vértices redundantes (me refiero a repetidos)?
Un solo vértice se compone de todos los atributos que componen este único vértice. Entonces dos vértices que comparten la misma posición pero tienen diferentes coordenadas de textura son vértices conceptualmente diferentes. Así que no, no hay una forma sencilla de repetir las posiciones de los vértices de los diferentes texCoords.
Pero generalmente tales duplicaciones de vértices son necesarias solo en algunas regiones raras (como bordes afilados, debido a diferentes normales, o como en su caso una costura de textura). Entonces, ¿las esquinas de todas las caras realmente tienen diferentes texCoords? Tal vez pueda preprocesar un poco sus datos y encontrar caras vecinas que compartan posiciones y texCoords y, por lo tanto, compartir el vértice. Me sorprendería si ese no fuera el caso para muchos vértices y terminas con solo un pequeño grupo de vértices duplicados.