[D3D] les points d'une primitive

les points d'une primitive [D3D] - C++ - Programmation

Marsh Posté le 23-06-2002 à 19:03:25    

bonjour à tous,
 
je debute en 3 dimensions, je programme en C++. Je charge un fichier exporté de 3D studio Max dont les points sont organisés de la facon suivante :
 
 
               3             4
 
          7             8
 
 
               1             2
 
          5             6
 
Désolé pour le schema, je m'explique, il s'agit d'un cube en perspective, et les numéros correspondent à l'ordre dans lesquels ils sont enregistrés dans le fichiers (.ASC pour etre precis).
 
 
J'ai deja vérifier les points dans le programme, ils sont justes, c'est l'ordre qui pose probleme. Avec la fonction DrawPrimitive, j'utilise "D3DPT_TRIANGLESTRIP" comme type de primitive, mais les vertex sont crées dans un ordre différent, et le cube n'en est plus un :(
 
 
le probleme vient de :
   -mon fichier exporté (.ASC)
   l-e type de primitive
   -autre chose que je ne comprends pas
 
 
Désolé de poser ce genre de questions :)

Reply

Marsh Posté le 23-06-2002 à 19:03:25   

Reply

Marsh Posté le 23-06-2002 à 19:12:05    

comment la liste d'indices est-elle sauvée ? si c'est des strips, affiche en strips, si c'est une liste, affiche en liste.
 
apparemment c'est sauvé en liste et tu affiches en strips. si ta liste est
 
1 2 3 2 4 3
 
en strip, ce sera interprété comme les triangles 1 2 3, 2 3 2, 3 2 4, 2 4 3 -> bordel
 
en liste (d3dpt_trianglelist), ce seront les triangles 1 2 3, 2 4 3 -> ok.

Reply

Marsh Posté le 23-06-2002 à 19:21:38    

et bien pour etre precis voila les points
 
Vertex 0:  X:0.0000     Y:0.0000     Z:0.0000
Vertex 1:  X:1.0000     Y:0.0000     Z:0.0000
Vertex 2:  X:0.0000     Y:1.0000     Z:0.0000
Vertex 3:  X:1.0000     Y:1.0000     Z:0.0000
Vertex 4:  X:0.0000     Y:0.0000     Z:1.0000
Vertex 5:  X:1.0000     Y:0.0000     Z:1.0000
Vertex 6:  X:0.0000     Y:1.0000     Z:1.0000
Vertex 7:  X:1.0000     Y:1.0000     Z:1.0000
 
en list, j'ai 3 triangles disposé sur 3 faces différentes, G pas de cube
 
J'espere que les coordonnées peuvent d'aider

Reply

Marsh Posté le 23-06-2002 à 19:47:52    

ghiby a écrit a écrit :

J'espere que les coordonnées peuvent d'aider


non puisqu'ils ne représentent que la géométrie ...  
 
pour dessiner des faces, tu as besoin d'une liste de faces. par ex dans ton cube, la face de derrière est formée des points 1, 2, 3 et 4. pour la dessiner, il faut deux triangles, on peut prendre les triangles 1 2 3 et 2 4 3. tu mets ces nombres dans un tableau et tu le passes à DrawIndexedPrimitive().  
 
tu peux dessiner en 3d sans liste de faces, mais ça impose de dupliquer tous tes points, donc convertir la liste d'indices en liste de points : le point 1, le point 2 et le point 3 pour la première face, le point 2, le point 4 et le point 3 pour la seconde face, etc. la liste d'indices évite cette répétition.
 
et c'est pour ça que tu vois n'importe quoi lorsque tu passes les points à DrawPrimitive() (j'avais pas vu dans ton premier post), il traite chaque groupe de trois points comme une face -> bordel.

Reply

Marsh Posté le 23-06-2002 à 20:23:26    

Ok je vois , je comprends mieux le probleme je te remercie.
Mais je souhaitais automatiser la chose, mon programme chargera n'importe quel .ASC pour l'afficher. Le systeme d'indexage des primitives demande un traitement particulier lourd dans le programme (sauf si je n'ai rien compris). Peut-etre est-il possible d'utiliser un autre format sous 3DMax pour exporter un fichier. N'y a t-il pas un format de fichier 123 243 etc...?

Reply

Marsh Posté le 23-06-2002 à 20:41:34    

ghiby a écrit a écrit :

Le systeme d'indexage des primitives demande un traitement particulier lourd dans le programme


non. c'est une information aussi importante que la géométrie elle-même. sans cette info, pas de solides. et ce n'est pas plus compliqué à exporter que la géométrie.
 
pour max, je n'ai que l'ASE comme export. typo dans ton message ? dans ce format, tu as :
 
*MESH_VERTEX  264 -56.8111 111.1512 0.0000
 
donc un identifiant de l'info (MESH_VERTEX), le numéro du vertex (264), puis ses coordonnés X Y Z.
 
les indices sont stockées comme suit :  
 
*MESH_FACE    0:    A:    0 B:   13 C:   12 AB:    0 BC:    1 CA:    1  *MESH_SMOOTHING 1  *MESH_MTLID 0
 
identifiant (MESH_FACE), les indices des trois points de la face (A B C), des booléens pour contrôler l'affichage des arêtes (AB, BC, CA), des infos de smoothing (aucune idée de comment le relire) et enfin l'id du matériau (MESH_MTLID) de cette face (chaque face peut avoir un id différent. l'id représente un indice dans la liste des sous-matériaux de l'objet. un objet à un matériau qui peut avoir des sous-matériaux).
 
tu relis les MESH_VERTEX pour les points, tu relis les MESH_FACE_LIST pour les indices.

Reply

Marsh Posté le 23-06-2002 à 20:47:40    

D'accord, en testant les fichiers export, je n'avais pas compris les .ASE, les meshes etant indexés, l'insertion dans le programme deviendra automatique (il me reste a coder). Avec l'autre format c'était plus dur (ou alors dupliquer les points pour avoir une liste -> lourd ). C'est parfait je te remercie d'user de ton temps, ton aide me sera precieuse !
 
Merci encore et bonne soirée

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed