Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Créer des Mailles

Compatible Director MX2004. Cliquer pour en savoir plus sur les compatibilités.Par Jagorochi, le 08 novembre 2005

(Je prendrais en compte le fait que vous savez créer une texture, un matériau, une ressource de modèle de type primitive ainsi qu’un modèle. 3DPI est fortement conseillé pour une manipulation et un accès rapide aux ressources et modèles.)

Dans de nombreuses situations, il n’est pas possible d’obtenir un type de géométrie compliqué, à partir de ressources primitives (#plane, #box, #cylinder, etc.) sans passer par la création d’une maille. Et dans la très grosse majorité des cas, les développeurs préfèrent effectuer ce processus de création dans un logiciel spécifique et dédié (3DS, Maya, etc.), plutôt que par Director.

Et cela est tout à fait légitime car la seule possibilité de créer des mailles sous Director, est de passer par le biais de Lingo !

voici un rapide point de vue des avantages et inconvénients

Avantages :

  • vitesse d’exécution
  • réduction significative de la taille du fichier
  • création dynamique en fonction de paramètres spécifiques
  • Modification dynamique de la maille selon les besoins impossible par un logiciel 3D.
  • Parfait pour les Algorithmes Personnalisé.

Inconvénients :

  • Processus de création long et austère (uniquement par Lingo)
  • Approche débutant très compliquée
  • Modifications du processus de création très difficiles
  • Bugs dans la gestion des couches Alpha (chevauchements possibles de faces)

A mon humble avis, je pense que la chose la plus difficile à comprendre et utiliser dans Shockwave 3D, est justement le processus de création d’une maille. Car pour cela, vous devez au moins connaître l’emplacement relatif de chaque sommet utilisé dans le modèle, ainsi que la distribution des sommets sur chaque face de la maille. Vous pourriez aussi avoir besoin d’une textureCoordinateList pour définir la façon dont les textures sont plaquées sur la maille, d’une colorList pour définir les couleurs des sommets et de la face, et d’une normalList pour définir les vecteurs normaux de chaque face (ne soyez pas trop effrayés par ces quelques explications car je reviendrais dessus en temps voulu).

Les mailles générées par Director sont constituées de faces triangulaires. Chaque face possède trois côtés et trois sommets et partage généralement des sommets avec une ou plusieurs autres faces. Voici le code minimum et nécessaire à la création d’une maille la plus simple possible, c'est-à-dire une seule et unique face :

on Creer_Une_Simple_Maille
 -- voici une fonction contenant le code minimum et nécessaire
 -- à la création d'une maille la plus simple possible,
 -- c'est-à-dire une seule et unique face
 ---------------------------------------------------------------
 -- initialisation de la ressource de type #mesh
 maMaille = gMonde3D.newmesh("ma_Simple_Maille",1,3,0,0,0)
 -- définition de la liste des sommets (vertices)
 maMaille.vertexList = [vector(0,50,0),vector(10,10,0),vector(60,-20,0)]
 -- définition de la distribution des sommets sur la face
 maMaille.face[1].vertices = [1,2,3]
 -- générations automatique des normales de face
 maMaille.generatenormals(#flat)
 -- construction finale de la ressource
 maMaille.build()
 
 -- création d'un modèle a partir de la ressource #mesh
 monModele = gMonde3D.newmodel("mon_Simple_Modèle",maMaille)
 -- le modèle est créer et utilise le matériau par défaut (utilisant lui même la texture par défaut)
 -- car aucun ne lui a été explicitement attribué
 
 monModele.debug = true -- vision de la "Sphere englobante" (bounding Sphere)
end

Téléchargez les SOURCES.

Mais reprenons depuis le début :

 myMesh = g3DWorld.newmesh("my_Simple_Mesh",1,3,0,0,0)

Cette commande initialise la ressource et les paramètres nécessaires à sa construction. De manière littérale :

monActeur3D.newmesh(nomDeLaMaille,nombreDeFaces,nombreDeSommets,nombreDeNormales,nombreDeCouleur
s,NombreDeCoordonnéesDeTexture)
  • nomDeLaMaille : chaîne de caractère d’identification
  • nombreDeFaces : nombre total de faces que contient la maille.
  • nombreDeSommets : nombre total de Sommets (vertices) que contient la maille.
  • nombreDeNormales : nombre total de normales utilisées par la maille.
  • NombreDeCouleurs : nombre total de couleurs utilisées par la maille.
  • NombreDeCoordonnéesDeTexture : nombre total de coordonnées de texture utilisées par la maille.

Dans cet exemple nous nous contentons simplement de tracer un polygone, et ne définissons aucunes coordonnées de texture, couleurs ou normales (que j’aborderais dans les futurs Tutoriaux).

  -- définition de la liste des sommets (vertices)
 myMesh.vertexList = [vector(0,50,0),vector(10,10,0),vector(60,-20,0)]

Il faut commencer par définir la position de tous les sommets que nous avons déclaré. Spatialement, un sommet est défini dans l’espace sur les 3 axes de l’univers 3D d’où l’utilisation de la forme vector(x,y,z).

-- définition de la distribution des sommets sur la face
 myMesh.face[1].vertices = [1,2,3]

La manière dont vous allez spécifier les sommets utilisés par une face (c'est-à-dire dans quel ordre) détermine quel côté de la face représente l’avant. Quand vous regardez la face et que vous spécifiez les sommets dans le sens inverse de celui des aiguilles d’une montre, le côté avant de la face est orienté vers vous. Il faut donc définir une liste de 3 sommets pour chaque face de la maille ou chaque numéro de sommet est identifié par sa position dans la vertexList de la maille. Vous pouvez également en déduire qu’il y a plusieurs possibilités pour le tracé d’une face. Dans l’exemple fournie l’ordre des sommets est [1, 2, 3], comme il aurait pu bien être [2, 3, 1] ou encore [3, 1, 2]… (La face étant bien évidement toujours tracé du bon coté).

-- générations automatique des normales de face
 myMesh.generatenormals(#flat)

Une normale est un vecteur indiquant une direction permettant à Director de définir l’éclairage et l’application des matériaux sur une face. Chaque face possède donc 3 normales définis sur chaque sommet et indiquant chacune une direction (si vous trouvez que ma définition n’est pas très claire, ou que vous trouvez mieux n’hésitez pas à en faire la remarque). Bon je vous avoue que cela est très compliqué à définir manuellement et bien heureusement vient à votre secours la commande generateNormals(), qui va permettre la définition automatiques de ces normales. Cette commande prend 2 paramètres différents :

Bon je pense que vous comprenez déjà un peu mieux avec une jolie image ;-)

-- construction finale de la ressource
 myMesh.build()

A présent, toutes les informations nécessaires à la construction de la maille ont été fourni à Director, et celui-ci peut donc la produire grâce à la commande build(). Si durant le processus de création vous avez fait une erreur, vous obtiendrez le message d’erreur : “Object has been deleted”, qui va apparaître très souvent au début, croyez moi !

Voilà voilà, c’est tout pour aujourd’hui ! ;-)
utilisez 3DPI pour modifier dynamiquement les valeurs de la ressource et mieux comprendre l'usine à gaz !!