2010-06-08 4 views
1

J'ai chargé un fichier .obj Wavefront et l'ai dessiné en mode immédiat, et cela fonctionne correctement.
J'essaye maintenant de dessiner le même modèle avec un vertex buffer, mais j'ai une question.Utilisation de tampons de vertex OpenGL en C++

Mes données du modèle est organisé dans les structures suivantes:

struct Vert 
{ 
double x; 
double y; 
double z; 
}; 

struct Norm 
{ 
double x; 
double y; 
double z; 
}; 

struct Texcoord 
{ 
double u; 
double v; 
double w; 
}; 

struct Face 
{ 
unsigned int v[3]; 
unsigned int n[3]; 
unsigned int t[3]; 
}; 

struct Model 
{ 
unsigned int vertNumber; 
unsigned int normNumber; 
unsigned int texcoordNumber; 
unsigned int faceNumber; 

Vert * vertArray; 
Norm * normArray; 
Texcoord * texcoordArray; 
Face * faceArray; 
}; 

Comme il est maintenant, je ne pense pas qu'il y ait des données redondantes, car plusieurs structures de visage peuvent pointer vers le même sommet, normal, ou une coordonnée de texture. Lorsque je crée des vbo pour les coordonnées de vertex, les normales et les textures, et que je leur assigne des données avec glBufferData, dois-je créer des tableaux avec des données redondantes afin qu'ils aient tous le même nombre d'éléments dans le même ordre? J'aimerais savoir s'il existe une façon plus simple de remplir les tampons avec la manière dont les données du modèle sont déjà organisées.

+0

En guise de commentaire sur votre structure 'Model': Vous pouvez utiliser' std :: vector' à la place de tableaux raw. Passez '& v [0]' au lieu du pointeur du tableau vers les fonctions gl appropriées. Il est garanti que le vecteur se comporte exactement comme un tableau - tant que vous ne le redimensionnez pas, car cela invalide les itérateurs et les pointeurs. – greyfade

Répondre

3

Oui, vous devez dupliquer les sommets car GL ne prend en charge qu'un seul tableau d'index pour tous les attributs de sommet. D'autre part, n'utilisez pas de doubles, utilisez simplement des flottants, la plupart des GPU ne les supportent pas et les convertiront en flottants.

Questions connexes