Je veux être en mesure de stocker un modèle atomique dans un programme OpenGL que j'écris. Rien d'extraordinaire; juste des valeurs de vertex de maillage constant stockées sous GLfloat[3]
, plus des textures simples. Je veux aussi que le modèle puisse bouger et tourner librement et comme un seul objet. Voici ce que j'ai jusqu'à présent:Stockage succinct de données de modèle atomique pour le programme OpenGL
typedef struct _coordnode {
GLfloat *pts; /* XYZ (vertex) or XY (texture) */
struct _coordnode *next;
} coordnode;
typedef struct _facenode {
GLfloat *norm; /* XYZ */
coordnode *vertices; /* head of linked list */
GLfloat *color; /* RGBA */
coordnode *textures; /* head of linked list */
struct _facenode *next;
} facenode;
typedef struct _model {
GLenum mode;
facenode *faces; /* head of linked list */
GLfloat *rot; /* delta-XYZ from Theta-origin */
GLfloat *rot_delta; /* delta-delta-XYZ */
GLfloat *trans; /* delta-XYZ from origin */
GLfloat *trans_delta; /* delta-delta-XYZ from origin */
} model;
Cela se met en place de telle sorte que le modèle a une listes chaînées de facenode
, dont chacune a deux listes chaînées de ses sommets et ses coordonnées de texture, respectivement.
Puisqu'il s'agit de mon premier programme C, ma question aux programmeurs expérimentés est de savoir si cette méthode particulière présente des incohérences ou des inefficacités, ou si elle stocke suffisamment de données.
Plus d'informations, pas nécessairement pertinente:
- Il n'y aura que quelques objets en mémoire, et deux d'entre eux seront impliqués dans la détection de collision.
- Un modèle aura une transparence partielle.
- Un modèle aura augmenté le texte rendu appliqué aux faces du modèle et se déplacera selon un vecteur de gravité.
- Deux modèles tourneront en même temps, en fonction de l'entrée externe.
Merci pour le temps et les efforts! Cela répond vraiment à beaucoup de questions. – amphetamachine