mayo 03, 2006

Pirámide a base de cubos en Blender mediante python

Partiendo de la función un cubo, tomada prestada de Blender-Python : Modéliser un cube, la idea es generar una pirámide.
Solo nos interesan los que van a conformar el borde exterior, así evitamos crear objetos innecesarios.
import Blender, whrandom

def creaCubo(pox, poy, poz):
global cuboid
NOMBRE='Cube.%03i' % cuboid
cuboid+=1

din=(whrandom.random()-1.0)/100.0

vertices_list=[
[pox+0.0, poy+0.0, poz+0.0],
[pox+0.0, poy+1.0+din, poz+0.0],
[pox+1.0, poy+1.0+din, poz+0.0],
[pox+1.0, poy+0.0, poz+0.0],
[pox+0.0, poy+0.0, poz+1.0-din],
[pox+0.0, poy+1.0+din, poz+1.0-din],
[pox+1.0, poy+1.0+din, poz+1.0-din],
[pox+1.0, poy+0.0, poz+1.0-din] ]

faces_list=[
[0,1,2,3],
[4,5,6,7],
[0,4,7,3],
[1,2,6,5],
[0,1,5,4],
[3,7,6,2] ]


A_CUBE_MESH=Blender.NMesh.GetRaw()

for coordinate in vertices_list:
A_VERTEX=Blender.NMesh.Vert(coordinate[0], coordinate[1], coordinate[2])
A_CUBE_MESH.verts.append(A_VERTEX)

for thisface in faces_list:
A_FACE=Blender.NMesh.Face()
for vertexpos in thisface:
A_FACE.append(A_CUBE_MESH.verts[vertexpos])
A_CUBE_MESH.faces.append(A_FACE)

Blender.NMesh.PutRaw(A_CUBE_MESH, NOMBRE)


def montaPlanta(ancho, altura):
global tamano
ancho=tamano-altura
direccion=[(0,1), (1,0), (0, -1), (-1,0)]
lejos=[(0,0), (0,ancho-1), (ancho-1,ancho-1), (ancho-1,0)]

for movimiento in range(len(direccion)):
for pos in range(ancho-1):
posx = direccion[movimiento][0] * pos + lejos[movimiento][0] + altura/2.0
posy = direccion[movimiento][1] * pos + lejos[movimiento][1] + altura/2.0
creaCubo(posx,posy,altura)

cuboid=0
tamano=10
for plantas in range(tamano):
montaPlanta(tamano, plantas)

Blender.Redraw()


El resultado que se obtiene tras ejecutar el script:



Como nota, lo del ruido blanco añadido a las caras mas alejadas es para hacer los cubos ligeramente diferentes y que se vea en el renderizado que está construido a base de los mismos.
Lógicamente es mas facil hacer la piramide con tantos cubos como los niveles de la altura y te evitas echar lineas de código, esto es tan solo para probar el funcionamiento de los scripts (que hace tiempo que tenía ganas :) ).

The Blender Python API Reference

Tags:

comentarios:

yense dijo...

hola amigo bueno mi pregunta es:

usu ubuntu pero veo que tiene un error en la importacion ya tengo instalado blender pero creo que me falta el
"whrandom"

sabes como lo puedo usar o donde lo consigo.

ya fui al gestor de paquetes pero no lo encuentro con ese nombre

gracias