Sei sulla pagina 1di 7

Script python in blender

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)

Carica un file blender con estensione .blend


Redraw()

Ridisegna tutte le finestre 3D Esempio 1


import Blender Blender.Save("/home/mastoo/Scrivania/script blender/base.blend",1)

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 sui vertici di una mesh


MFace

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()

retobj = scn.objects.new(Rettangolo) Blender.Redraw()

Questo script crea il rettangolo mostrato in figura

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.

Trasformazioni geometriche con matrici e vettori


Le matrici (quadrate) e i vettori vengono gestiti in blender dal modulo Blender.Mathutils che contiene gli oggetti Matrix e Vector . In blender un vettore o una matrice possono essere 2D,3D e 4D e possono essere creato con un delle seguenti istruzioni
v=Vector(1,0,0) vertex = [1,0,0] v=Vector(vertex) matrix = Matrix([1,1,1],[0,1,0],[1,0,0]) v1=Vector(1,1,1) v2=Vector(0,1,0) v3=Vector(1,0,0) matrix = Matrix(v1,v2,v3)

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)

Che crea un matrice che rappresenta un rotazione . I parametri sono:


angle(float): angolo di rotazione desiderato in gradi matSize(int): la dimensione della matrice. Pu essere 2x2,3x3,4x4 axisflag(string):asse di rotazione

x asse x y asse y z asse z r asse di rotazione arbitrario

axis :l'asse arbitrario usato con r

Esempio 3 rotazione di un vettore intorno all' asse X seguita da un traslazione


v = Vector(1,2,1) trasl = TranslationMatrix(Vector(5,1,1)) rot = RotationMatrix(30,4,x) v = v*rot*trasl

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

Rendering automatico di scene


Per gestire una scena in blender con uno script necessario importare il modulo Blender.Scene. Esso contiene l'oggetto Scene che gestisce le informazioni di una scena, come la lista di oggetti della scena, la posizione del cursore, le informazioni sul rendering ecc...Per effettuare il rendering da uno script possiamo usare l'oggetto RenderData del modulo Blender.Scene.Render che da l'accesso alle informazioni sul rendering. Esempio 5 Rendering di una scena
import Blender scn = Blender.Scene.GetCurrent() rnd = scn.getRenderingContext() rnd.render()

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()

Potrebbero piacerti anche