2010-10-09 2 views
1

Le fichier d'en-tête de modèle OpenGL Je travaille avec contient des définitions sur ce qui suit:Conversion du fichier .obj en fichier d'en-tête de modèle OpenGL - indices et paramètres f?

static const float modelVertices[NUM_OBJECT_VERTEX * 3] = {}

static const float modelTexCoords[NUM_OBJECT_VERTEX * 2] = {}

static const float modelNormals[NUM_OBJECT_VERTEX * 3] = {}

static const unsigned short modelIndices[NUM_OBJECT_INDEX] = {}

Là où il y a un tas de chiffres (flottants et entiers, comme raccord) séparés par des virgules entre les parenthèses.

Il semble simple de convertir un fichier .obj v, vt, vn au format ci-dessus. Mon fichier .obj a également un groupe de f qui comprennent des triplets séparés par /. Je ne suis pas sûr de ce que ces paramètres sont exactement ...

Quels paramètres dois-je convertir pour obtenir le quatrième - les modelIndices?

(je besoin d'admettre à l'avance que je suis un débutant à OpenGL, donc des excuses si cela semble! Trop élémentaire)

Répondre

1

Triplettes sont juste une définition de visage.

Si vous avez f 1 2 3

Cela signifie que vous avez un triangle qui est faite de sommet des indices 1 et 2 3.

Si toutes les entrées sont comme ça, cela signifie que vous pouvez directement remplissez votre modelIndices avec ces indices, et dessinez-les en utilisant GL_TRIANGLES.

Maintenant, si elles sont séparées par / cela signifie que vous avez un mappage différent entre la position des sommets et les coordonnées de texture et/ou les normales.

Ceci est quelque chose comme OpenGL can't handle directly et le chemin à parcourir pour vous est d'exploser la texcoord et les données normales dans des tableaux de la même taille que le tableau de position vertice.

Pour ce faire est trivial: voici le code pseudo:

read face data (triplets) 
for each triplet 
    read vertex indice 
    read texcoord and normal indices 
    fetch texcoord @ texcoord indice from your vt array 
    store texcoord @ vertex indice in your modelTexCoords array 
    fetch normal @ normal indice from your vn array 
    store normal @ vertex indice in your modelTexCoords array 

    etc 

Voir aussi la doc de wikipedia, qui expliquent bien format obj: http://en.wikipedia.org/wiki/Obj

+0

hmm, vous dites que 'texcoord' (pour utilisation dans 'modelTexCoords') est en fait * répété * dans chaque'/'-triplet comme' vertex index/texcoord/normal index'? – ina

+0

oui, un peu comme ... – Stringer

+0

hmm, donc fondamentalement 'vn' est répété dans l'index normal de' modelTexCoords' ainsi que dans 'modelNormals' ... aussi, dans le cas où vous avez f avec un tas de' 1/2/3's, le modelIndices est juste le premier élément (1 dans ce cas) de chaque f triplet? – ina

Questions connexes