martes, 8 de junio de 2010

PANDA3D: Primer contacto

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 donde se ubicara el panda, hasta donde llegara, y que 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.

No hay comentarios:

Publicar un comentario

Gracias por tu comentario! :)