Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2185 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [D3D] les points d'une primitive

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[D3D] les points d'une primitive

n°164155
ghiby
Posté le 23-06-2002 à 19:03:25  profilanswer
 

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 :)

mood
Publicité
Posté le 23-06-2002 à 19:03:25  profilanswer
 

n°164161
youdontcar​e
Posté le 23-06-2002 à 19:12:05  profilanswer
 

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.

n°164165
ghiby
Posté le 23-06-2002 à 19:21:38  profilanswer
 

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

n°164173
youdontcar​e
Posté le 23-06-2002 à 19:47:52  profilanswer
 

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.

n°164183
ghiby
Posté le 23-06-2002 à 20:23:26  profilanswer
 

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...?

n°164202
youdontcar​e
Posté le 23-06-2002 à 20:41:34  profilanswer
 

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.

n°164209
ghiby
Posté le 23-06-2002 à 20:47:40  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [D3D] les points d'une primitive

 

Sujets relatifs
[D3D] J'aime bien les exemples Microsoft~[Excel 97] Etiquette et graphiques "Nuages de points"
[D3D] Question sur la déclaration dex vertex shaders[D3D] Comment faire pour obtenir les coordonnées du frustum?
Algo de remplissage d'une forme dont les points sont connusSDK DirectX - probleme avec D3D
[D3D] Quel est l'angle que forme l'espace du frustrum sur l'axe y?[C++] Calcul automatique de points
[VC++ et DLL] problème avec la desactivation des points d'arret[Math] calculer la distance entre 2 points
Plus de sujets relatifs à : [D3D] les points d'une primitive


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR