-
Structure des Modèles 3D
Bonjour à tous,
Je suis un nouveau sur ce forum mais je suis loin d'être complètement débutant. Je travaille en ce moment à développer un jeu en 3D qui sera une fusion des jeux "Descent 3" et "X-Wing Alliance" pour ceux qui connaissent. (C'est l'objectif final d'ici 2 ou 3 ans)
Mes interrogations portent sur le comment gérer les modèles 3D en interne autant pour le rendu avec OpenGL que le système de gestion des collisions.
Le système projeté pour les modèles 3D graphiques est le suivant :
Mesh 1
--> Sous-mesh 1
--> Sous-mesh 2
--> Sous-mesh 3
--> Sous-mesh ...
Mesh 2
--> Sous-mesh 1
--> Sous-mesh 2
--> Sous-mesh 3
--> Sous-mesh ...
Mesh ...
Après avoir parcouru les sujets de ce forum dans son intégralité, il me semble avoir vu pour que pour faire le rendu, il faut d'abord dessiner toutes les faces opaques et par la suite celles qui ont de la transparence de la plus loin à la plus proche.
Donc du point de vue du moteur 3D, je dois trier la liste des objets (Mesh) à dessiner (Présentes dans le Frustum de la caméra) par rapport à la distance de la lentille et dessiner toutes les sous-meshs sans transparence les unes après les autres. Et finalement repasser la liste des objets dans le sens inverses (du plus loin au plus proche) en dessinant seulement les sous-meshs avec de la transparence. C'est ça qu'il faut faire ?
Autre interrogation, c'est un peu hors-sujet par rapport à OpenGL mais bon ...
Le système de gestion des collisions est basé sur une cartographie par Octree afin de réduire au maximum le nombre d'entité à tester. Ce que je prévois faire est d'effectuer un test d'interférence des sphères globales (Celles correspondant aux Meshs). Si le test est concluant faire la même chose avec les sphères globales (celles des sous-meshs) afin de savoir quelles sous-meshs se touchent et finalement faire un test de collision sur les sous-meshs en question. (un polygon soup sur les polygones des sous-meshs graphique) Ça vous semble une bonne idée ?
Merci de vos commentaires et suggestions.
A+
SuperGénie
-
Pour le système de rendu, j'aurai vu le système de cette façon là aussi. Pour les collisions, j'aurais ajouté en plus une HitBox au niveau des submesh (c'est ce que je fais dans mon moteur)
-
Pour la transparence, ce n'est pas seulement les sous-mesh, mais tout les triangles qu'il faut trier (sinon tu aura des artifact sur les objets transparent convexe). A moins que tes mesh transparent ne soit tous concave, dans ce cas, ta technique suffit (en activant le backface culling).
Pour les collisions, j'aurais utilisé des bounding-box plutôt que des bounding-sphere, mais c'est une question de goût. A voir aussi si tes mesh sont alongés ou plus ou moins cubique (sur des mesh alongés ou plat, les bounding sphère donnes beaucoup plus de faux-positif que les bounding box).
Et pour finir (mais tu y a peut-être déjà pensé), je n'utiliserai pas les même mesh pour le rendu et pour la colision. J'utiliserai un mesh détaillé pour le rendu, et un mesh plus simple pour la colision. Ca fait moins de triangles à gérer pour un coup mémoire pas si important.
-
Merci de vos réponses, à ce que je vois je suis sur la bonne voie mais je ne pensais que la gestion de la transparence était aussi compliqué. Je pense que la gestion de la transparence ne sera pas ajouté à la première itération de mon projet. Plutôt à la 2e itération peut-être même à la 3e, l'idée est d'ajouter des briques uniquement lorsque le système sera stable.
Pour ce qui est des sous-meshs avec transparence, il s'agit en fait des verrières blindés des chasseurs essentiellement. Certaines sont prismatiques (Rectangulaire ou triangulaire avec 1 ou 2 triangles) avec une armature opaque alors que certaines sont en forme de bulle (300 polygones max) sans la moindre armature. L'idée c'est de voir les pilotes à l'intérieur des cockpits.
A+
SuperGénie