Question

J'ai créé un un chargeur OBJ qui peut importer des fichiers OBJ qui ont été exportés de 3DS Max dans mon Simple Viewer / app OpenGL. Au cœur de ce fut un Vector3.h écrit avec l'aide de quelques tutoriels.

Il a très bien fonctionné sur un modèle couple j'ai utilisé, mais celui que je veux travailler avec a quelque chose de différent qui n'a pas été pris en compte. Il dispose de 4 points ses sommets au lieu de 3. Voici un échantillon d'une ligne, je travaille avec:

g Box02
usemtl Wood_Bark
s 4
f 1/1/1 2/2/1 3/3/1 4/4/2
f 4/1/3 3/2/3 5/3/3 

La première « f » ligne a 4 sommets Je suis intéressé. Mon Vertex3.h prend X, Y, Z. Dans les autres modèles que j'avais, toutes les lignes étaient comme la deuxième ligne « f », avec seulement trois éléments . Je reçois un sommet hors de portée, quand je suis allé vérifier où il se passait, je l'ai vu était sur cette ligne, donc je suppose parce qu'il ya plus de données sur la ligne qui peut être manipulé. Voici l'ensemble Vertex3.h

http://pastebin.com/dgGSBSFe

Et c'est la ligne de code qui échoue. sommets est un Vector3.

tempVertices.push_back ( vertices[--vertex] );

Ma question est, quel est le point 4? Comment expliqueriez-vous que quelque chose comme mon dossier Vector3.h? On dirait que je dois créer un Vector4.h, et ignorer le 4ème var s'il n'y a que 3 sur la ligne. Mais je voudrais en savoir plus sur ce que je traite, et des conseils sur la façon de le faire. Le 4ème élément alpha ou quelque chose? Comment doit-il être utilisé, ou doit-il être utilisé à tous dans mes calculs Vector3.h?

Était-ce utile?

La solution

Un visage avec quatre points est appelé un quad. En général, si vous voulez le rendre, vous devriez le casser en deux triangles.

Ainsi, par exemple, vous avez ceci:

 ___
|   |
|   |
|___|

Vous devez en faire ceci:

 ___
|\  |
| \ |
|__\|

En supposant que les sommets vont dans le sens antihoraire (la valeur par défaut en OpenGL), en partant de la gauche, vous pouvez faire deux triangles. Le premier des sommets du triangle serait premier, deuxième du quad, et troisième sommets. Le second sommets de triangles seraient troisième, quatrième, et des premiers sommets du quad.

Autres conseils

Pourquoi ne pas exporter sous forme de triangles seulement? Convertir en EMesh dans 3ds max, faire toutes les arêtes visibles, l'exportation. Ou tout simplement utiliser l'option d'exportation OBJ appropriée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top