« Programmation objet et géométrie/Objets Python sous Blender/Création de surfaces paramétrées avec bpy » : différence entre les versions
Ligne 61 : | Ligne 61 : | ||
< |
<code> |
||
| | | | |
| | | | |
||
4--54-104-154- |
4--54-104-154- |
||
Ligne 72 : | Ligne 72 : | ||
| | | | |
| | | | |
||
0--50-100-150- |
0--50-100-150- |
||
</ |
</code> |
||
===tableau des faces=== |
===tableau des faces=== |
Version du 1 août 2010 à 08:44
Pour représenter des surfaces paramétrées, on utilise la seule chose que Blender sache gérer: Des polyèdres. Seulement ils ont tellement de faces et elles sont si petites, que le polyèdre aura l'air, si on n'y fait trop attention, d'une surface de classe . Cette représentation des surfaces par des approximations polyédrales est à la base de chapitres entiers des mathématiques:
- la méthode des éléments finis en analyse numérique;
- la cohomologie en topologie.
Dans les deux cas, la surface est approchée par une triangulation. Comme les deux paramètres de la surface
s'appellent souvent et , le nom d' uv-mapping est souvent utilisé dans les logiciels de 3D (comme Blender) pour désigner les coordonnées de textures.
Ci-dessous on va représenter une surface unilatère, la surface romane de Steiner.
Expression paramétrique
La surface de Steiner est donnée par la représentation paramétrique suivante:
avec et .
sommets
Entête du fichier
Comme précédemment, on importe les classes Blender et bpy, mais aussi les fonctions trigonométriques et , qui sont des méthodes (et propriété pour ) de l'objet math:
from Blender import *
import bpy
from math import pi, cos, sin
sommets=[]
Liste des sommets
Lors de sa création, la liste des sommets est vide. Il reste donc à la remplir, ce qui se fait par quelque chose qu'on n'a pas utilisé dans l'article précédent: Une boucle. Celle-ci est double (puisqu'il y a deux paramètres) et ses deux indices sont choisis entre 0 et 100 (pour i) et entre 0 et 50 (pour j). Pour passer de à , on multiplie i par pour avoir u. De même, :
for i in range(0,100):
u=i*pi/100
for j in range(0,50):
v=j*pi/50
x=sin(2*u)*sin(v)**2
y=sin(u)*sin(2*v)
z=cos(u)*sin(2*v)
sommets.append([x,y,z])
x, y et z sont calculés à partir de u et v avec les formules ci-dessus, puis le sommet (x,y,z) est ajouté à la base de donnée des sommets. À l'issue de cette boucle, la surface de Steiner sera riche de points.
Il reste à trouver, dans cette immense collection, quels sommets sont reliés à quels autres.
faces
plan des (u,v)
Les faces seront des quadrilatères, bordés horizontalement par des lignes de niveau de v et verticalement par des lignes de niveau de u. Les numéros des sommets correspondent à l'ordre de leur création, soit colonne par colonne:
| | | |
4--54-104-154-
| | | |
3--53-103-153-
| | | |
2--52-102-152-
| | | |
1--51-101-151-
| | | |
0--50-100-150-