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! :)