« Programmation objet et géométrie/Objets Python sous Blender/Objets 3D en Python sous Blender » : différence entre les versions
m L'image VivianiBlender2.jpg a été retirée car elle a été supprimée sur Commons par Krd |
Annulation des modifications 446706 de CommonsDelinker (discussion) |
||
Ligne 77 : | Ligne 77 : | ||
Une fois le rendu effectué, et en texturant les deux objets avec des couleurs transparentes, on obtient le rendu que voici: |
Une fois le rendu effectué, et en texturant les deux objets avec des couleurs transparentes, on obtient le rendu que voici: |
||
[[image:VivianiBlender1.jpg|center]] |
|||
Avec un peu d'imagination, on peut voir la courbe de Viviani. Mais le lissage de la figure a diminué un peu le rayon de la sphère et on ne voit plus le point double de la courbe. Alors on peut utiliser ''Blender'' pour créer un nouvel objet, l'intersection des deux objets précédents: |
Avec un peu d'imagination, on peut voir la courbe de Viviani. Mais le lissage de la figure a diminué un peu le rayon de la sphère et on ne voit plus le point double de la courbe. Alors on peut utiliser ''Blender'' pour créer un nouvel objet, l'intersection des deux objets précédents: |
Version du 22 juillet 2014 à 07:45
Pour Blender, les cubes, sphères, cônes etc. sont des objets. Des objets 3D, mais des objets.
Pour Python, tout est objet. Y compris les objets de Blender!
On peut donc utiliser l'un pour créer les autres.
Dans l'exemple ci-dessous, on va représenter une fenêtre de Viviani, et plus précisément l'intersection d'une sphère et d'un cylindre pleins.
Les objets
Le fichier doit, comme on l'a vu, commencer par
from Blender import *
import bpy
La sphère
En fait il y a deux sphères différentes, l'une avec des méridiens et des parallèles (donc à faces quadrilatérales), l'autre ressemblant à un icosaèdre avec éventuellement plus de 20 faces, mais triangulaires. La première sphère s'appelle UVsphere, la seconde Icosphere. C'est la seconde qu'on a choisi ici, avec 4 subdivisions appliquées à un icosaèdre et un rayon de 2.0:
me1 = Mesh.Primitives.Icosphere(4,2.0)
Elle s'appelle me1 parce que c'est un mesh.
Le cylindre
Le cylindre doit avoir un rayon moitié de celui de la sphère, soit 1.0 et on lui donne une hauteur de 2.0; en plus, pour qu'il soit suffisamment arrondi, on lui donne 64 sommets par base:
me2 = Mesh.Primitives.Cylinder(64,1.0,2.0)
Déplacement
Maintenant il est temps d'accéder à la scène, ce qu'on fait en invoquant la méthode GetCurrent de l'objet Scene.
Ensuite on place un cylindre de type me2 (créé ci-dessus) dans la scène. C'est une instanciation de l'objet me2.
Enfin on translate ce cylindre, simplement en modifiant son abscisse, qui devient 0.5:
sc = Scene.GetCurrent()
cyl=sc.objects.new(me2,'Mesh')
cyl.LocX=0.5
LocY et LocZ sont les autres coordonnées de l'objet, et il existe aussi des propriétés angulaires des objets comme RotX etc. qui sont donnés en radians.
La scène
Pour finir, il suffit de placer une sphère (objet me1) dans la même scène, et d'activer l'affichage de celle-ci dans Blender:
sph=sc.objects.new(me1,'Mesh')
Window.RedrawAll()
C'est tout! Le script dans son intégralité est rappelé ci-dessous:
from Blender import *
import bpy
me1 = Mesh.Primitives.Icosphere(4,2.0)
me2 = Mesh.Primitives.Cylinder(64,1.0,2.0)
sc = Scene.GetCurrent()
cyl=sc.objects.new(me2,'Mesh')
cyl.LocX=0.5
sph=sc.objects.new(me1,'Mesh')
Window.RedrawAll()
À l'origine
Une fois le rendu effectué, et en texturant les deux objets avec des couleurs transparentes, on obtient le rendu que voici:
Avec un peu d'imagination, on peut voir la courbe de Viviani. Mais le lissage de la figure a diminué un peu le rayon de la sphère et on ne voit plus le point double de la courbe. Alors on peut utiliser Blender pour créer un nouvel objet, l'intersection des deux objets précédents:
Intersection
On sélectionne les deux objets d'un clic droit, puis on appuie sur la touche W du clavier, ce qui permet de sélectionner l'intersection (opération booléenne). Mais on ne voit rien si on n'enlève pas la sphère et le cylindre. Une fois que c'est fait, il reste cet objet: