Está en la página 1de 9

MCDEM 2011

Tutorial Panda3D - Crayon3D

SOFIA SWIDAROWICZ Universidad Ramon LLull. BES La Salle. Seminario de las TIC MCDEM 2011

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Tutorial para principiantes Panda3D Crayon3D (Python) La presente tiene como intencin guiar a los usuarios que comenzarn a experimentar con Panda3D y Crayon3D en el proceso de instalacin y ejecucin correcta de ambos programas. Cuando comenc me result complicado saber qu hacer, por lo que perd un poco de tiempo tratando de configurarlos, y luego no saba que ejemplos deba mirar para aprender (aparte del manual que ofrece Panda3D) la estructura de la engine. Espero que con este manual de iniciacin te ahorre un tiempo precioso. 1 Paso - Qu necesito? Bien! Esta es la pregunta que todos nos hacemos cuando queremos comenzar algo desde cero. Lo primero es saber qu es cada cosa. Panda3D: Es un Game Engine o motor de videojuegos y un framework para renderizados 3D para programas en python y C++. Es de cdigo abierto e incluye grficos, audio, E/S, deteccin de colisiones y otra serie de caractersticas para la creacin de juegos en 3D. Fue desarrollado por la Universidad Carnegie Mellon Entretainment Technolgy Center. Crayon3D: Es una plataforma diseada para usarse con Panda3D, permitiendo usar por ejemplo los Wiimotes y luces infrarrojas para Head Tracking. En este tutorial explicar como usar el Panda y el Crayon mediante Python. Mandos de la Wii Led Infrarrojo Ahora, debes descargar: Panda3D SDK for Developer desde su pgina web. www.panda3d.org. A pesar de que el SDK est disponible para diversas plataformas, lo mejor, si es que trabajars con los Wiimotes, es que lo hagas bajo entorno Windows. Si usas un Mac puedes descargar mquinas virtuales como Parallels y trabajar normalmente con Windoes, esto debido a que Crayon3D funciona bajo ese sistema operativo. Despus descarga el paquete Crayon3D desde su pgina web http://www.etc.cmu.edu/ Por ltimo debers descargar un editor de Python; yo uso el Notepad++ que es bastante bueno y lo podrs descargar en su pgina oficial: http://notepad-plus-plus.org/ Paso 2 Instalacin Lo siguiente es instalar cada uno de los paquetes que acabas de descargar. Panda primero, seguidamente el crayn 3D y luego el Notepad ++. En esta parte no hay mayor complicacin. Recomiendo que una vez instalados, copies cada carpeta al directorio raz C: (ver paso 4) Paso 3 Ppython Una vez has instalado todos los paquetes, querrs probar algn ejemplo. Te recomiendo que primero comiences con los de Panda 3D.

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Cosas a tener en cuenta: 1) Todos los ficheros cuya extensin sea .py significa que son archivos python. Por lo que ser el ejecutable de la aplicacin. 2) Para ejecutar el ejemplo, tienes dos opciones: la primera ir a inicio y buscar en el men Panda 3D Sample Programs. Selecciona uno de la lista y vers como se ejecuta, ten paciencia mientras abre (a veces tarda un poco mientras renderiza los modelos) y la segunda: debers abrir una consola de Windows. Es decir: Men Inicio Ejecutar teclears CMD que abrir una consola. Usando los comandos de Windows puedes buscar las rutas donde se encuentran los ejemplos:

Imagen 1.- Buscando archivos de ejemplos Para ejecutar cualquiera de los ejemplos basta con escribir: ppython nombredearchivo.py

Imagen 2 .- Ejecutando los archivos Paso 3 Prueba Panda 3D Ahora que ya sabes como ejecutar va consola los archivos, es hora de mirar un ejemplo de cdigo en Panda 3D.

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Ambiente:
#ShowBase carga todos los mdulos de Panda3D y hace aparecer la ventana de Panda. from direct.showbase.ShowBase import ShowBase class MyApp(ShowBase): def __init__(self): ShowBase.__init__(self) # Carga el modelo de fondo self.environ = self.loader.loadModel("models/environment") # Renderiza el modelo. self.environ.reparentTo(self.render) # Transforma el modelo a las posiciones adecuadas # X Y Z self.environ.setScale(0.25, 0.25, 0.25) self.environ.setPos(-8, 42, 0)

app = MyApp()

Si#El procedimiento run()deberas ver es la siguiente imagen. todo sale bien, lo que contiene el ciclo principal, renderiza

un frame, # maneja las tareas del background y se repite. No regresa nada, as que necesita ser #llamado una vez y debe ser la ltima lnea del cdigo a ejecutar app.run()

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Task: Ahora se le aadir una tarea, en este caso que la cmara se mueva, o que gire el escenario:
from math import pi, sin, cos #se importan las libreras para calcular la rotacin de la cmara from direct.showbase.ShowBase import ShowBase from direct.task import Task class MyApp(ShowBase): def __init__(self): ShowBase.__init__(self) # Carga el modelo de fondo self.environ = self.loader.loadModel("models/environment") # Renderiza el modelo. self.environ.reparentTo(self.render) # Transforma el modelo a las posiciones adecuadas # X Y Z self.environ.setScale(0.25, 0.25, 0.25) self.environ.setPos(-8, 42, 0) # Aade el procedimiento spinCameraTask que calcula la posicin deseada # basado en el tiempo que ha transcurrido, la cmara rota 6 grados cada segundo self.taskMgr.add(self.spinCameraTask, "SpinCameraTask") # Se define un procedimiento para mover la cmara. def spinCameraTask(self, task): angleDegrees = task.time * 6.0 #segundos 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 app = MyApp() app.run()

Actores:
from math import pi, sin, cos from direct.showbase.ShowBase import ShowBase from direct.task import Task from direct.actor.Actor import Actor class MyApp(ShowBase): def __init__(self): ShowBase.__init__(self) # Carga el modelo de fondo self.environ = self.loader.loadModel("models/environment") # Renderiza el modelo. self.environ.reparentTo(self.render) # Transforma el modelo a las posiciones adecuadas # X Y Z self.environ.setScale(0.25, 0.25, 0.25) self.environ.setPos(-8, 42, 0) # Aade el procedimiento spinCameraTask que calcula la posicin deseada # basado en el tiempo que ha transcurrido, la cmara rota 6 grados cada segundo self.taskMgr.add(self.spinCameraTask, "SpinCameraTask") # carga y transforma el actor panda self.pandaActor = Actor("models/panda-model", {"walk": "models/panda-walk4"}) self.pandaActor.setScale(0.005, 0.005, 0.005)

TUTORIAL PANDA3D - CRAYON3D


self.pandaActor.reparentTo(self.render) # Lo hacemos caminar, mediante el ciclo walk. self.pandaActor.loop("walk") # Se define un procedimiento para mover la cmara. def spinCameraTask(self, task): angleDegrees = task.time * 6.0 #segundos 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 app = MyApp() app.run()

MCDEM 201 1

El resultado es ver al panda en el escenario, caminando mientras la cmara rota.

Paso 4 Colocar los ficheros de Crayon 3D en el directorio adecuado Una vez has probado el Panda 3D puedes usar el crayon3D. Pondr el ejemplo que us para aprender, se llama EggWorld, al cual le hice modificaciones grficas partiendo del original. Tambin puedes probar los demos que se encuentran dentro del fichero Crayon3D, slo tienes que comentar la lnea 81 a 86 si te causa algn error al ejecutarlo en la demo1. Si pruebas EggWorld, primero, debes colocar el fichero con la aplicacin en directorio raz C: y luego debes verificar que existan dentro todos los ficheros de Crayon 3D, este paso es el ms importante porque de lo contrario no se ejecutar el programa. Si no existen, debes copiarlos del directorio de crayn3D (paso 2) y pegarlos todos dentro de la carpeta del proyecto EggWorld. Lo que necesitas copiar: wiiuse.dll wiiuse_al.dll wiiuse_al.py wiimote_handler.py Crayon3DScene.py Crayon3DGesture.py

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Paso 5 Ejecutar EggWorld Antes de ejecutar el programa, debers conectar el Wiimote. Necesitars del puerto bluetooth para ello ( si no lo tienes en tu ordenador, puedes conseguir un dispositivo bluetooth USB), luego dirigirte al panel de control y aadir un nuevo dispositivo bluetooth. Debes dejar presionado los botones 1 y 2 del Wiimote para que sea reconocido como nuevo dispositivo. Sin embargo, para este ejemplo (EggWorld) en particular, necesitars de 2 Wiimotes pues uno servir de cmara para captar los movimientos de la luz infrarroja, mientras el otro servir para realizar tareas, como por ejemplo dibujar. Una vez instalados debes ejecutar la consola de Windows (paso 3) y luego con el comando ppython nombredefichero.py ejecutars el programa. Necesitars tener un led infrarrojo tambin, ya que el Wiimote captura el movimiento de la luz infrarroja y la proyecta en la aplicacin como si fuese el puntero. (Ver imgenes 3, 4 )

Imagen 3 Puntero Movindose

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Imagen 4 .- Actor movindose

A continuacin te dejo un pequeo cdigo de muestra que utiliza los procedimientos de crayon3D.

from pandac.PandaModules import * import direct.directbase.DirectStart from direct.showbase.DirectObject import DirectObject from direct.gui.OnscreenText import OnscreenText # Librerias del Sistema import math, random, sys # Librerias Crayon3DScene from Crayon3DScene import * from wiimote_handler import * from Crayon3DGesture import * class Mundo(DirectObject): def __init__(self): env_model = loader.loadModel("models/environment") env_model.setPos(0, 0, 0) self.scene = Crayon3DScene(env_model) self.scene.setDefaultPhysics() self.scene.setEnvGeomMesh() app = Mundo() run()

TUTORIAL PANDA3D - CRAYON3D

MCDEM 201 1

Antes de terminar con el mini tutorial quiero dejar uno tips que te ahorrarn tiempo en caso de que te encuentres con los mismos obstculos con los que yo me he encontrado: 1.- Siempre conecta los Wiimotes, sin importar que digan que estn conectados. Si esto sucede, los remueves y los vuelves a aadir. 2.- Identacin del cdigo: Python es muy cuidadoso con la identacin, si alguna vez te topas con: unexpected ident significa que hay algn espacio realizado con el tabulador o el enter y que no deberan estar ah.

Para corregirlo haz click en

Te mostrar la identacin del cdigo, la flecha significa que hay un espacio que no debera estar ah

Lo eliminas con el backspace y dando espacios (sin el tabulador).

También podría gustarte