Actionscript 3 – Papervision3D Interactive Collada, DAE objects.
Para los que no saben lo que es un Collada o DAE, los archivos Collada son modelos 3D, exportados a formato xml. Basicamente se define dentro de este xml, cada vertice, mesh, material, etc. de un objeto. Si se estan preguntando para que podria llegar a servir esto, la respuesta es sencilla, para transportar de manera universal los modelos a otras tecnologias, como en este caso es papervision3D, que posee un DAEParser que genera estos modelos en nuestro escenario.
Mas informacion de los archivos Collada en wikipedia
Para lograr que un objeto collada sea interactivo dentro de papervision3D, debemos cumplir con los siguientes requerimientos:
- Que el viewport sea interactivo…. viewport.interactive = true.
- Que todos los materiales del collada tambien sean interactivos.
- Y por ultimo, pero lo mas importante agregar el listener para el InteractiveScene3DEvent en cada uno de los objetos dentro de nuestro collada.
Como en general, si estan trabajando con colladas descargados de por ahi y no creados por ustedes mismos, no sabran que cantidad de subobjetos tenga su collada, y lo mismo para la cantidad de materiales, es por eso que para agregar los listeners yo uso una funcion recursiva que se los agregue a cada child. Para los materiales es un poco mas sencillo, accediendo a la lista de materiales del objetos puedes setearlos a todos como interactivos.
Aca les pongo un ejemplo de como seteo cada material como interactivo:
1 2 3 4 5 6 7 | private function setInteractiveMaterials(targetObject:DisplayObject3D, value:Boolean):void { for each(var mat:MaterialObject3D in _targetObject.materials.materialsByName) { mat.interactive = value; } } |
Luego de tener todos los materiales del objeto como interactivos solo resta agregar el listener a cada child. Eso lo hago mediante la siguiente funcion.
1 2 3 4 5 6 7 8 | private function addEventListeners(displayObject:DisplayObject3D, eventType:String, listener:Function):void { displayObject.addEventListener(eventType, listener); for each(var child:DisplayObject3D in displayObject.children) { addEventListeners(child, eventType, listener); } } |
La llamada a la funcion seria algo asi:
1 | addEventListeners(_obj, InteractiveScene3DEvent.OBJECT_PRESS, daePressedHandler); |
Realmente no estoy seguro si esta es la mejor manera de hacer eso, cualquier sugerencia y/o comentario sera bien recibido.
VER EJEMPLO
DESCARGAR EJEMPLO PARA CS4
DESCARGAR EJEMPLO PARA CS3


Thanks! This helped us but we had to add the missing caurina and PV3D classes as well.
What is the missing code as i can’t seem to get the example working. Thanks
Hi Jake, sorry about that. You need to include Tweener and Papervision3D libraries in your source path of flash. Or directly put the sources into the same folder of the example.
As much as Flex is a powerful tool for scripting, I would like to stay in the Flash AS3 environment for now(Artist). Is it possible for you to give a demo using CS3 structure. You are the only one who seems to have solve to problem of DisplayObject3d material being interactive with functions. I tried to translate from flex to CS3, but not completely understanding constructors I get lost. I am new to having to writing logic on visuals. Help please.
Note: I am a Mac please plain text, zip
Hi Phaze, now you could download the example for cs3. http://www.miguelmoraleda.com/examples/daeInteractive.rar Good Luck