Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parJean-Luc Sylvain Modifié depuis plus de 9 années
1
Imagerie Numérique Synthèse d’images Objets 3D Licence Pro 2005-2006 Sébastien THON IUT de l’Université de Provence, site d’Arles Département Informatique
2
2 1. Introduction Un objet 3D peut comporter plusieurs milliers, voire dizaines ou centaines de milliers de faces. Impossible de les générer manuellement dans un code source. Utilisation d’outils : logiciels de modélisation 3D (3D Studio Max, Maya, LightWave, …) qui permettent de générer graphiquement un objet 3D et de le sauver dans un fichier. Il faut ensuite charger ce fichier dans le code source.
3
3 Interface type d’un logiciel de modélisation 3D : Interface de 3D Studio Max
4
4 Formats d’objets 3D 3D Studio Max: binaire (.max,.3ds), texte (.ase,.asc) DirectX : (.x) Lightwave : (.lwo) Maya : binaire (.mb), texte (.ma) … Ou trouver des objets 3D 3D Cafe: www.3dcafe.com …
5
5 2. Codage en mémoire d’un objet 3D Dans notre programme, il faut charger le fichier crée par un modeleur 3D Déclarer des classes appropriées pour coder en mémoire l’objet 3D.
6
6 2.1 Décomposition en listes de sommets et faces Un objet est composé de faces (souvent des triangles). Une face est définie par 3 sommets. Un sommet = un point 3D (x,y,z).
7
1ère solution de codage en mémoire : Représenter un objet par une liste de faces : typedef struct { float x, y, z; } Point3D; typedef struct { Point3D p1,p2,p3; } Face; Objet3D : Face *liste_faces; 0 1 2 3 4 1 2 3 x y p1p2p3 10250315023180 315025023180 231802502080 liste_faces 1 2 3
8
8 Problème : Un sommet est partagé par plusieurs faces informations redondantes, donc perte de place mémoire. Sommet partagé par 6 faces Sphère composée de 960 faces 960 x 3 point3D(x,y,z) 960 x 3 x 3 float 34560 octets Sommet partagé par 32 faces
9
2ème solution de codage en mémoire : Séparation en liste de sommets et en liste de faces. 0 1 2 3 4 typedef struct { float x, y, z; } Point3D; typedef struct { int a, b, c; } Face; Objet3D : Point3D *liste_sommets; Face *liste_faces; 1 2 3 xyz 10250 3150 250 2080 23180 liste_sommets x y 0 1 2 3 4 abc 014 124 423 1 2 3 liste_faces
10
10 Sphère composée de 960 faceset de 482 sommets 960 x 3 indices + 482 point3D(x,y,z) 960 x 3 int + 482 x 3 float 23088 octets Sommet partagé par 6 faces Sommet partagé par 32 faces Gain en place mémoire.
11
11 2.2 Décomposition en sous-objets Dans un logiciel de modélisation 3D, les objets sont souvent crées par assemblage de sous-objets. On retrouve cette décomposition dans les fichiers crées. ObjetSous-objets
12
12 Classe Objet3D Classe SousObjet3D Première idée de décomposition en classes : class Objet3D { private : list liste_sous_objets }; Mais…
13
13 2.3 Duplication d’objets 3D Si on a plusieurs objets identiques dans la même scène Duplication de la même géométrie. Perte de place mémoire, informations redondantes. Ces objets identiques ne diffèrent que par leur position et leur rotation.
14
14 Solution: Séparer les informations de positionnement (position, rotation) classe Objet3D et les informations de géométrie (liste de sous objets composés de faces) classe Geometrie3D contient une liste de SousObjet3D
15
15 Résumé : au final, on utilisera les classes suivantes : class Objet3D { GLfloat xpos, ypos, zpos; GLfloat xrot, yrot, zrot; Geometrie3D *geometrie; }; class Geometrie3D { list liste_sous_objets; }; class SousObjet3D { Point3D *liste_sommets; Face *liste_faces; };
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.