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

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Ligne 58 : Ligne 58 :
===plan des (u,v)===
===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 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-


===tableau des faces===
===tableau des faces===

Version du 1 août 2010 à 08:42


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:

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-

tableau des faces