Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Il modulo principale dell'API Python di Blender il modulo Blender. Ogni programma script python che vuole interagire con blender deve importarlo. Le funzioni principale messe a disposizione dal modulo blender sono:
Save(filename, overwrite=0)
Salva la scena blender di blender in un file .blend. Se overwrite assume un valore diverso da zero allora il file di nome filename viene sovrascritto altrimenti viene ritornato un errore.
Load(filename=None)
Creazione di una mesh L'accesso agli oggetti di tipo mesh in blender avviene tramite il sottomodulo blender.Mesh. Questo modulo contiene gli oggetti
MVert
che contiene le informazioni sulle facce di una mesh. Ogni faccia puo contenere tre o quattro vertici.
Mesh
che da l'accesso agli oggetti di tipo mesh contenuti nella scena L'oggetto Mesh possiede una campo verts che una sequenza di MVert, e un campo faces che una sequenza di Mfaces. Questi due campi possono essere utilizzati per costruire una mesh. Esempio 2 Creazione di un rettangolo
import Blender vertex = [[0,0,0],[0,2,0],[1,2,0],[1,0,0]] faces = [[0,1,2,3]] Rettangolo = Blender.Mesh.New("Rettangolo") Rettangolo.verts.extend(vertex) Rettangolo.faces.extend(faces) scn = Blender.Scene.GetCurrent()
1. Illustrazione: Rettangolo
Le due istruzioni
vertex = [[0,0,0],[0,2,0],[1,2,0],[1,0,0]] faces = [[0,1,2,3]]
Creano rispettivamente un lista di vertici e un lista di facce. La faccia specificata indicando gli indici dei vertici della lista vertex. Le tre istruzioni successive
Rettangolo = Blender.Mesh.New("Rettangolo") Rettangolo.verts.extend(vertex) Rettangolo.faces.extend(faces)
Creano un mesh Rettangolo con la funzione New(nome mesh) del modulo Blender.Mesh, e vi aggiungono i vertici e le facce della mesh.
Le successive istruzioni
scn = Blender.Scene.GetCurrent() retobj = scn.objects.new(Rettangolo)
Aggiungono la mesh rettangolo alla scena creando un nuovo oggetto. Un oggetto in blender un istanza della classe Object del modulo Blender.Object e rappresenta una mesh, una luce, una camera,ecc. Esso permette di accedere a tutte le informazioni che riguardano l'oggetto come posizione, rotazioni, ipo ecc.
Blender mette a disposizione varie operazioni con vettori e matrici che sono di seguito elencate
vec + vec vec - vec vec * float/int vec * matrix vec * vec vec * quat -vec
Agli elementi di un vettore o di una matrice si puo accedere come una sequenza
x = matrix[0][1] x = vector[0]
vector = matrix[2]
il modulo Blender.Mathutils mette a disposizione due funzioni che servono per effettuare traslazioni e rotazioni di oggetti. Esse sono rispettivamente:
TranslationMatrix(Vector)
che ha come parametro di ingresso il vettore il vettore traslazione e restituisce in uscita un matrice 4x4 che rappresenta la traslazione.
RotationMatrix(angle,matSize,axisFlag,axis)
angle(float): angolo di rotazione desiderato in gradi matSize(int): la dimensione della matrice. Pu essere 2x2,3x3,4x4 axisflag(string):asse di rotazione
notiamo che il vettore v va premoltiplicato perch un vettore riga. Esempio 4 rotazione seguita dalla traslazione di un cubo
import Blender from Blender import Mathutils from Blender.Mathutils import * import math vertex = [[1,-1,-1],[-1,-1,-1],[-1,-1,1],[1,-1,1],[1,1,-1],[-1,1,-1],[-1,1,1],[1,1,1]] faces = [[0,1,2,3],[0,4,7,3],[1,5,6,2],[2,3,7,6],[1,0,4,5],[4,5,6,7]] #crea una mesh
CubeMesh = Blender.Mesh.New('Cube') CubeMesh.verts.extend(vertex) CubeMesh.faces.extend(faces) scn = Blender.Scene.GetCurrent() CubeObj = scn.objects.new(CubeMesh) M = CubeObj.getMatrix() rot =RotationMatrix(30.0,4,"r",Vector(0,0,1)) tra = TranslationMatrix(Vector(5,0,0)) M= M*rot*tra CubeObj.setMatrix(M) Blender.Redraw()
Nell' esempio precedente si fatto uso dei metodi messi a disposizione dalla classe
Object : getMatrix() setMatrix(Matrix)
che rispettivamente restituiscono e impostano la matrice di trasformazione dell'oggetto consentendone di effettuare la trasformazione. La trasformazione dell'oggetto avviene grazie alle seguenti istruzioni
M = CubeObj.getMatrix() rot =RotationMatrix(30.0,4,"r",Vector(0,0,1)) tra = TranslationMatrix(Vector(5,0,0)) M= M*rot*tra CubeObj.setMatrix(M)
vengono create un matrice di rotazione 4x4 e un matrice di traslazione che successivamente vengono concatenata con l'istruzione
M=M*rot*tra
L'ordine in cui si effettuano le trasformazioni quello in cui compaiono nel prodotto le matrici, nel nostro caso si riporta prima l'oggetto nella sua posizione e orientamento originario con la matrice M poi si fa la rotazione e poi la traslazione. Notiamo che quando viene creato un oggetto esso viene sempre posizionato nell'origine (0,0,0) cio l'origine del sistema di riferimento locale dell'oggetto l'origine. Il risultato dello script il seguente
Esempio 6 Rendering di una scena con modifica delle dimensioni dell'immagine finale e abilitazione dell'immagine di sfondo
import Blender scn = Blender.Scene.GetCurrent() rnd = scn.getRenderingContext() rnd.imageSizeX(3264) rnd.imageSizeY(2448) rnd.setBackbufPath("immagine di sfondo") rnd.enableBackbuf(1) rnd.render()