FrameWork para PaperVision3D
February 26, 08 by admin
PaperVision3D es el mejor conjunto de librerías que he podido experimentar para la carga y manipulación de objetos 3D. Sin embargo no todo es color de rosa y tiene su jodida gracia el hacerlo de manera satisfactoria, razón por la cual terminé creando una clase que facilite todos estos trabajos, basándome en la clase que construyen en Papervision3D tutorial from the ground up, pero claro, realizando algunos cambios importantes para facilitar el trabajo.

El formato base con la información de los objetos 3D es COLLADA, cuya extensión es DAE y además es un estándar W3C, que a través de una implementación XML define las propiedades necesarias para la representación de cualquier objeto 3D. Personalmente uso Blender para cualquier cosa que requiera construir en 3D, y esta ocasión no sería la excepción, sin embargo, sólo a partir de la versión 2.45 pude exportar al formato requerido sin tener problemas. Se puede texturizar a través de UV porque PaperVision3D es compatible con esa opción.
El constructor
La función constructor de la clase recibe 4 parámetros: contenedorBase, nDAE, nombre y nombreM:
contenedorBase: El MovieClip que va a contener el objeto a cargar.
nDAE: El nombre del archivo DAE que contiene los datos que vamos a cargar.
nombre: Nombre con que se identificará el objeto que estamos cargando.
nombreM: Nombre con que se identificará la textura. Es el nombre de vinculación de la textura dentro de la librería.
La función inicial
init3D() es la función que inicializa los parámetros necesarios para la carga del objeto…. y hasta donde me acuerdo fue modificada porque la manera como fue concebida originalmente estaba desactualizada, más exactamente la parte donde se configura la carga de la textura, que deberá ser la misma imagen con que se realizó el texturizado UV desde el programa de modelado 3D que se haya usado. Si se usó Blender se tendrá el cuidado de darle un nombre al material, y ése nombre será el mismo con que se exporte para Action Script desde la librería la imagen de la textura. Asimismo se agregó la opción de texturizar las cada polígono por ambas caras.
El ciclo
Si sabemos que nuestro objeto puede tener algún tipo de cambio, sea de posición, rotación o tamaño, necesariamente se requiere un ciclo que se encargue de renderizar el objeto cada que exista alguno de estos cambios. Para eso existe loop3D() quien básicamente no sufrió cambios.
Modificando propiedades
Si es necesario modificar alguna propiedad del objeto cargado, se usará el método mPropiedad, quien tiene como parámetros el nombre de la propiedad y el respectivo valor.
Capturar el valor de una propiedad
Complemento al anterior se encuentra el método cPropiedad, que recibe como parámetro el nombre de una propiedad y la devuelve como de tipo String.
Asignar Clic
Se puede asignar de manera personalizada una función que se ejecute cada que el usuario de clic sobre el objeto, lo que es bastante útil si se quiere tener interactividad con el mismo.
Ejemplo
En las siguientes líneas se hace uso de todo lo anteriormente nombrado, con lo que nos daremos cuenta que es mucho más fácil implementarlo que explicarlo (esas preciadas horas perdidas que jamás se recuperarán…)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import Papervision3DTutorial; var tiempo:Date = new Date(); var plano:Papervision3DTutorial = new Papervision3DTutorial(this, "assets/cathedral.dae", "planta_1", "MyPhotoMaterial"); function mover(m:MouseEvent):void{ //seteando el valor de la propiedad X de posición en 200 plano.mPropiedad("x", 200); } function clic(m:MouseEvent):void{ trace("hacer algo....lo que sea!!: " + plano.cPropiedad("x")); } plano.asignarFuncionClic(clic); //modificar propiedad del objeto 3D boton.addEventListener(MouseEvent.CLICK, mover); //interactividad con el objeto cargado plano.addEventListener(MouseEvent.CLICK, clic); |
El trabajo desde Blender
Como ya lo dije, usé la versión 2.45 y hablaré de ésto porque creo necesarios saber algunos detalles:
Detalle 0: Las versiones anteriores a la 2.45 exportan el archivo Collada con problemas.
Detalle 1: Los polígonos deben ser de 3 vértices (Seleccionar la malla en modo edición y oprimir la secuencia CTRL+T).
Detalle 2: No olvidar asignar el nombre del material y que éste sea el mismo que el nombre de vinculación de la textura en la librería de Flash.

Descargar los archivos usados en este pseudoTutorial (incluye archivo en blender y PaperVision3D)
PaperVision3D
Action Script 3
Flash CS3
Framework




ferflores Says: 28.02.08 at 9:44 am
que onda gerson, no se porqué nunca habia caido en cuenta de tu blog, pero tienes buen material, estoy haciendo el mio pero casi no tengo tiempo…
se ve bien todo por acá, saludos!
Google Earth, foto’s en collada-files « Sam en Matthias 3 maanden in Ecuador Says: 30.05.08 at 12:07 pm
[...] Cuenca (mogelijk in GPS-coördinaten). Bovendien kan elk onderzocht gebouw worden getekend en het 3D-model (*.dae collada-bestand) kan ingevoerd worden in Google [...]
Cristian soto Says: 16.07.08 at 2:32 pm
Sabes he probado los archivos de Papervision y Collada y me sale este error en Flash CS3:
5001: El nombre del paquete ‘org.papervision3d’ no contiene la ubicación de este archivo. Cambie el nombre de la definición del paquete en este archivo, o mueva el archivo. C:\lab\GreatWhite\org\papervision3d\Papervision3D.as
como lo puedo arreglar soy nuevo…..
he provado cambiando la ruta a los archivos Papervision del Repositorio y no se arregla que puede ser?
Ayuudame por favor…
admin Says: 17.07.08 at 10:26 am
Pera Cristian, no debes cambiar ninguna ruta. ¿ Usaste los archivos del ejemplo ?