¿Cuál es la mejor práctica con respecto al almacenamiento de datos de vértices en Open GL? Es decir:
struct VertexColored {
public:
GLfloat position[];
GLfloat normal[];
byte colours[];
}
class Terrian {
private:
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
VertexColored vertices[];
}
o tenerlos almacenados por separado en la clase requerida como:
class Terrian {
private:
GLfloat vertices[];
GLfloat normals[];
GLfloat colors[];
GLuint vbo_vertices;
GLuint vbo_normals;
GLuint vbo_colors;
GLuint ibo_elements;
}
Respuestas:
No hay ninguna mejor práctica. Todo varía según la aplicación que se está desarrollando.
Para el renderizador de juegos no hay necesidad de almacenar vértices tanto en RAM como en VRAM , eso significa que solo necesita mantener la identificación de vbo. La excepción es el terreno donde necesita tener acceso a las posiciones debido a la altura de la ubicación / colisiones del jugador.
¿Necesita tener todos los datos de vértice juntos? Si desea tener múltiples colores para los mismos vértices, como diferentes colores para los mismos modelos de jugadores, juntar todo puede causar pocos obstáculos en el desarrollo.
¿Accede a datos fuera de la clase? Si no, solo terminará con más código como en
vertices->position[i]
lugar depositions[i]
. En el diseñador de juegos / modelos, debes acceder a ellos desde afuera, pero no estás accediendo a todos los datos al mismo tiempo cuando modelas, luego accedes a posiciones y cuando estás coloreando, accedes a los colores.Lo único que juntaría son los valores
xyz
(rgb
) en una estructura para un código más agradable:Editar: me gustaría agregar que algunas personas están usando
unions
glVertex * 3v, glVertex * 4v, glUniform * v ... más fácil llamando a donde se pasa la matriz en lugar de variables separadas:fuente