Home > Actionscript, Programacion, Varios > Aplicaciones 3D en Flash y un tutorial Básico de Papervision 3D

Aplicaciones 3D en Flash y un tutorial Básico de Papervision 3D

January 23rd, 2009
Hace tiempo tengo ganas de empezar a escribir pequeños tutoriales sobre cosas entretenidas. Y una de las cosas mas entretenidas que descubrí en el ultimo año es la posibilidad de crear aplicaciones 3D en Flash. He visto sitios en 3d interactivos que me han dejado con la boca abierta. Hay un blog que se dedica a buscar y postear diariamente sitios en 3D buenos : Daily Papervision3D

Existen varios motores 3D que podemos utilizar: Away3D, Sandy, Five3D, Papervision3D, entre otros… En mi caso elegi papervision3D, ya que durante el año pasado estuve trabajando con él. Bueno, arranquemos con el breve tutorial…

Lo que vamos a hacer es lo siguiente:

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)
package  
{
 import flash.events.Event;
 import org.papervision3d.materials.utils.MaterialsList;
 import org.papervision3d.materials.WireframeMaterial;
 import org.papervision3d.objects.primitives.Sphere;
 import org.papervision3d.view.BasicView;
 import org.papervision3d.objects.primitives.Cube;
 
 [SWF(width="640", height="480", backgroundColor="#FFFFFF", frameRate="60")]
 public class HolaMundo extends BasicView
 {
    private var cubo:Cube;
 
    public function HolaMundo() 
    {
       var materiales:MaterialsList = new MaterialsList();
       materiales.addMaterial(new WireframeMaterial(), "all");
 
       cubo = new Cube(materiales);
       scene.addChild(cubo);
 
       camera.y = 500;
       camera.lookAt(cubo);
 
       startRendering();
 
    }
 
    override protected function onRenderTick(event:Event = null):void 
    {
       cubo.yaw(1);
       renderer.renderScene(scene, camera, viewport);
    }
 
 }
 
}

Vamos a ver parte por parte este código:

public class HolaMundo extends BasicView

En este caso nuestro document class esta extendiendo a BasicView. Por que? Bueno, cuando creamos algo en PV3d debemos encargarnos de crear y manejar diferentes objetos necesarios para redenderear el mundo 3d, ellos son: la escena, el viewport y la camara. Bueno, la gracia es que toda eso ya esta hecho dentro del BasicView, por lo cual al principio no debemos preocuparnos por esto. En este blog se puede leer un poco mas sobre el BasicView.

Luego, dentro de nuestro constructor tenemos:

var materiales:MaterialsList = new MaterialsList();
materiales.addMaterial(new WireframeMaterial(), "all");
cubo = new Cube(materiales);
scene.addChild(cubo);

Aqui estamos creando un cubo con determinado material (el wireframe es tan solo uno de los diferentes materiales que le podemos asignar a los objetos en pv3d, recomiendo mirar la documentacion para conocer mas sobre el tema materiales). Luego de creado el cubo lo debemos agregar como child de la escena que vamos a renderear. Si quieres que se muestren los objetos en pv3d, debes agregarlos a la escena. Tal cual lo haces usualmente con los sprites.

camera.y = 500;
camera.lookAt(cubo);
startRendering();

Bueno, el cubo ya esta en la escena. Lo que hacemos ahora es subir la camara al y=500, y luego la hacemos mirar al cubo que creamos anteriormente. Con esto logramos un angulo para apreciar mejor el efecto 3D. Ya tenemos todo listo, ahora empezamos a renderear. El startRendering agrega un eventListener al enter frame y llama a onRenderStick.

override protected function onRenderTick(event:Event = null):void 
{
 cubo.yaw(1);
 renderer.renderScene(scene, camera, viewport);
}

Para lograr la rotacion del cubo, lo que hacemos es girarlo 1 grado en cada frame con el yaw(1). Y luego rendereamos la escena usando la camara y el vierport del BasicView. En lugar de este ultima linea tambien podriamos usar super.onRenderStick(event).

Bueno, con esto tendriamos nuestro primer ejemplo de papervision funcionando. Para ver mas tutoriales de papervision recomiendo pegarse una vuelta por pv3d.org.

Muchas gracias

mstekl

  1. January 24th, 2009 at 12:24 | #1
    Que tal tengo una duda existencial con respecto a preparar un escena en el PAPERVISIO3D, lo que sucede es que no logro que funcionen las clases ya las tengo cragadas y aun asi no logro que suceda nada. este tutorial esta muy bueno, pero mi duda es como puedo cargar un modelo 3D externo ya sea DAE, ASE, supongo que se usa el componenete COLLADA pero ni idea de como preprar la escena, conoces un tutorial para novatos que explique como hacerlo?
    suerte y gracias por el aporte.
  2. January 24th, 2009 at 13:00 | #2
    Hola Alex, gracias por el comentario. A pedido tuyo el próximo tutorial será sobre cómo cargar un modelo 3D externo. Sobre tu problema concreto de que no te sucede nada, lo que te puedo sugerir es que me muestres el código a ver si puedo ver en qué le estas errando.
    Saludos, Mauricio
  3. January 24th, 2009 at 13:37 | #3
    oye ya pude hacer que funcione el ejemplo, pero y si quiero cargar un archivo DAE? que funcion debo importar, o como lo ogro?

    thanks
  4. January 24th, 2009 at 18:05 | #4
    Para trabajar con un modelo DAE en papervision lo unico que tienes que hacer es lo siguiente:
      daeobj = new DAE();
      daeobj.load("tetera.dae");
      daeobj.scale = 30;
      scene.addChild(daeobj);
    


    La clase DAE está dentro de pv3d (org.papervision3d.objects.parsers.DAE), la tienes que importar. Y luego de instanciarte un objeto de ese tipo, le dices que cargue el modelo dae que tu quieras. Luego lo agregas a la escena.

    En los proximos días voy a escribir un tutorial mas completo sobre el tema.
    Saludos y gracias.
    Mauricio
  5. February 2nd, 2009 at 08:38 | #5
    Hola,
    Buenissimo tutorial que tines aqui, e gracias por el link ;)
  6. Coco
    August 17th, 2009 at 07:17 | #6
    y que fue de este tema?? justo apenas he descuvierto el papervision3d pero la pagina pv3d.org no funciona… donde puedo encontrar un tutorial basico?


    saludos
  7. emanuel
    March 19th, 2010 at 23:22 | #7
    hola, y donde supuestamente va este codigo??
    me podrías por favor
  8. March 19th, 2010 at 23:32 | #8
    Hola Emanuel, el codigo va en el document class de tu proyecto. Si no sabes lo que es el Document Class, te recomiento leer el siguiente tutorial: http://www.actionscript.org/resources/articles/636/2/Getting-Started-With-AS3-and-Flash-CS3/Page2.html

    saludos,
    Mauricio
  1. No trackbacks yet.