PANDA3D: Primer contacto

8 06 2010

En estos primeros tutoriales de panda, vamos a explicar lo mas basico, para representar  modelos, como animarlos y como mover la camara.

En este ejemplo hay que tener en cuenta que los ejes, por defecto en panda estan cambiados, donde la Y es profundidad y Z, es vertical.

En el codigo intentamos explicar los pasos a seguir de este ejemplo basico.

from math import pi, sin, cos
from direct.showbase.ShowBase import ShowBase
from direct.task import Task
from direct.actor.Actor import Actor
from direct.interval.IntervalGlobal import Sequence
from panda3d.core import Point3

class MyApp(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# Cargamos los modelos del fondo
self.environ = self.loader.loadModel("models/environment")
# Pinta el modelo en la pantalla
self.environ.reparentTo(self.render)
# Aplicamos una escala y posicion
self.environ.setScale(0.25, 0.25, 0.25)
self.environ.setPos(-8, 42, 0)
# Aplicamos un tarea repetitiva, pasandole como parametro el nombre el metodo y un ID
self.taskMgr.add(self.spinCameraTask, "SpinCameraTask")
# Cargamos el modelo del panda creando un Actor, con el nombre del EGG para cargar y
# un atributo walk para realizar la animacion de andar
self.pandaActor = Actor("models/panda-model",{"walk": "models/panda-walk4"})
#Le damos una escala al panda y lo pintamos en la pantalla
self.pandaActor.setScale(0.005, 0.005, 0.005)
self.pandaActor.reparentTo(self.render)
# Llamamos a un metodo repetitivo pasandole el ID de los atributos de la animacion
self.pandaActor.loop("walk")
# Creamos los intervalos dónde se ubicara el panda, hasta dónde llegara, y qué realizara.
# un giro de 180 grados, en 13 segundos y 3 segundos el giro.
pandaPosInterval1 = self.pandaActor.posInterval(13,Point3(0, -10, 0),startPos=Point3(0, 10, 0))
pandaPosInterval2 = self.pandaActor.posInterval(13,Point3(0, 10, 0),startPos=Point3(0, -10, 0))
pandaHprInterval1 = self.pandaActor.hprInterval(3,Point3(180, 0, 0),startHpr=Point3(0, 0, 0))
pandaHprInterval2 = self.pandaActor.hprInterval(3,Point3(0, 0, 0),startHpr=Point3(180, 0, 0))
# Aqui creamos la sequencia en la que utilizara uno u otro
# Primero empieza en y=-10 y acaba en y=10 en 13 segundos, da un giro de 180 grados
# en 3 segundos y despues empieza en 10 y acaba en -10.
self.pandaPace = Sequence(pandaPosInterval1,pandaHprInterval1,pandaPosInterval2,pandaHprInterval2,name="pandaPace")
# Llamada al metodo repetitivo de la sequencia de intervalos
self.pandaPace.loop()

# Define el procedimiento de la camara, rotanto sobre el centro de la escena
def spinCameraTask(self, task):
angleDegrees = task.time * 6.0
angleRadians = angleDegrees * (pi / 180.0)
self.camera.setPos(20 * sin(angleRadians), -20.0 * cos(angleRadians), 3)
self.camera.setHpr(angleDegrees, 0, 0)
return Task.cont

# El Main de la aplicacion.
app = MyApp()
app.run()

Este es el resultado:

En los proximos tutoriales explicaremos, como implementar este ejemplo en la Web.


Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: