« 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 55 : Ligne 55 :


==faces==
==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''.

===tableau des faces===

Version du 31 juillet 2010 à 20:01


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.

tableau des faces