« Programmation objet et géométrie/Objets Python sous Blender/Création d'un objet 3D en Python sous Blender » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Ligne 39 : Ligne 39 :
*<math>1 \rightarrow 2 \rightarrow 3</math>
*<math>1 \rightarrow 2 \rightarrow 3</math>


C'est dans l'ordre 0, 1, 2 qu'on va donc entrer les sommets de la première face.
C'est dans l'ordre 0, 1, 2 qu'on va donc entrer les sommets de la première face:


<source lang="python">
<source lang="python">

Version du 29 juillet 2010 à 19:24

Un objet 3D est un objet ! En l'occurrence, un objet Mesh, que l'on peut créer et modifier sous Python. Puisque le plus petit objet 3D est le tétraèdre, on va en créer un pour illustrer par un exemple comment ça fonctionne. L'exemple sera un tétraèdre régulier inscrit dans un cube, pour avoir plus facilement les coordonnées de ses sommets.

Création de l'objet

Une fois que l'on a transformé l'une des vues 3D en vue Texte (script Python), et entré le fameux import Blender qui permet de commencer, on va également importer la classe Mesh dont le tétraèdre sera une instance. Cette classe fait partie du paquet bpy (blender python) qu'on va donc importer, en plus de Blender lui-même:

from Blender import *
import bpy

Un tétraèdre est un polyèdre, et hérite donc de ses propriétés. On peut donc dire qu'un tétraèdre est une instance d'un polyèdre, ou qu'un polyèdre est une classe dont le tétraèdre hérite certaines propriétés.

Entrée des sommets

Les 4 sommets du tétraèdre seront stockés dans un tableau appelé sommets. Contrairement à CaRMetal, ce ne sont pas les noms des sommets qui seront stockés, mais directement leurs coordonnées:

sommets=[ [-1,-1,-1], [1,1,-1], [1,-1,1], [-1,1,1] ]

Pour définir le tétraèdre, il reste à lui fournir la liste de ses faces (les arêtes en découleront automatiquement).

Entrée des faces

En fait il n'est pas nécessaire de créer les 6 arêtes du tétraèdre parce que celles-ci sont les bords des faces de celui-ci, et on n'a besoin que de créer les 4 faces, comme ci-dessus.

Chaque face sera décrite comme une liste portant, dans l'ordre, les numéros des sommets qui la définissent, en commençant à compter à partir de 0.

Pour connaître l'ordre dans lequel on va citer les sommets qui définissent chaque face, on peut regarder les vecteurs normaux de toutes les faces du tétraèdre:

Comme ces vecteurs normaux seront utilisés par le moteur de rendu pour simuler la réflexion ou la réfraction, il est préférable de numéroter les sommets de chaque face, de façon que ces vecteurs soient cohérents entre eux, ce qui, en utilisant les numéros des sommets ci-dessus, donne (avec un parcours dans le sens trigonométrique)

C'est dans l'ordre 0, 1, 2 qu'on va donc entrer les sommets de la première face:

faces= [ [0,1,2], [0,2,3], [0,3,1], [1,2,3] ]

Naissance du tétraèdre

À ce stade, le tétraèdre tm est créé, et il ne reste plus qu'à le placer dans l'espace (figure Blender) ce qui se fait par la méthode PutRaw de la classe NMesh. En donnant à celle-ci le paramètre 1, on va forcer Blender à recalculer les vecteurs normaux, ce qui corrige les éventuelles erreurs faites au moment de la déclaration des faces ci-dessus. Enfin on demande à Blender de mettre à jour son affichage par Redraw():

NMesh.PutRaw(tm,"tetra",1)
Blender.Redraw()

Une fois qu'on a exécuté le script avec le raccourci clavier Alt+P, un objet supplémentaire est apparu dans la scène 3D, et il s'appelle "tetra". En le texturant puis en effectuant un rendu (appui sur F12), on a l'image suivante:

Exercices

Faire un tétraèdre régulier dont la base est horizontale

Seules les coordonnées des sommets sont différentes de l'exemple ci-dessus.

Faire une stella octangula

Deux manières:

  1. Créer deux tétraèdres, dont la réunion sera la stella octangula;
  2. Créer un polyèdre concave, il faudra tout de même 14 sommets et 24 faces!

Faire un octaèdre régulier

Pour créer sous Python des objets 3D plus complexes, il est nécessaire d'utiliser des boucles.