« Programmation objet et géométrie/Objets Python sous Blender/Création de fractales avec bpy » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
 
Ligne 5 :
Comme précédemment, pour pouvoir utiliser les méthodes de ''bpy'', on doit les importer:
 
<sourcesyntaxhighlight lang="python">
from Blender import *
import bpy
sommets=[]
faces=[]
</syntaxhighlight>
</source>
 
Les tableaux ''sommets'' et ''faces'' sont des variables globales; Python va les modifier au fur et à mesure des appels récursifs à la fonction ''sierpin'' ci-dessous.
Ligne 18 :
Pour simplifier le code ci-dessous, on crée une fonction ''milieu'' qui, à deux tableaux de trois coordonnées (deux points dans l'espace) associe un troisième tableau du même genre:
 
<sourcesyntaxhighlight lang="python">
def milieu(m,n):
x=(m[0]+n[0])/2.
Ligne 24 :
z=(m[2]+n[2])/2.
return [x,y,z]
</syntaxhighlight>
</source>
 
==Récursivité==
Ligne 33 :
*Sinon, on construit sur chaque sommet, un tétraèdre de Sierpinski deux fois plus petit, dont les autres sommets sont les milieux des arêtes qui passent par lui:
 
<sourcesyntaxhighlight lang="python">
def sierpin(a,b,c,d,n):
if (n>0):
Ligne 50 :
faces.append([ns-4,ns-1,ns-3])
faces.append([ns-3,ns-2,ns-1])
</syntaxhighlight>
</source>
 
La variable ''ns'' contient le nombre actuel de sommets, en effet elle est calculée comme longueur du tableau contenant la liste des sommets, qui est donc bien égale au nombre de sommets. Mais comme ceux-ci sont numérotés à partir de 0, les 4 derniers sommets sont les numéros ''ns-4'' à ''ns-1'' (il n'y a pas de numéro ''ns'').
Ligne 66 :
Grâce à ce qui précède, il suffit pour avoir les sommets et faces de l'approximation polyédrale de l'objet fractal, d'une seule ligne:
 
<sourcesyntaxhighlight lang="python">
sierpin([-1,-1,-1],[1,1,-1],[-1,1,1],[1,-1,1],6)
</syntaxhighlight>
</source>
 
Cet appel remplit les tableaux ''sommets'' et ''faces'' qu'il suffit de fournir à un objet ''polyèdre'' pour créer celui-ci:
Ligne 83 :
 
 
<sourcesyntaxhighlight lang="python">
si=bpy.data.meshes.new('sierp')
si.verts.extend(sommets)
Ligne 89 :
scn = bpy.data.scenes.active
ob = scn.objects.new(si, 'sierpinski')
</syntaxhighlight>
</source>
 
Ensuite, après avoir texturé l'objet 3D, il suffit d'un appui sur le bouton ''F12'' du clavier pour effectuer un rendu: