Inicio > Papervision3d > Actionscript 3 – Papervision3D Interactive Collada, DAE objects.

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

Categories: Papervision3d Tags:
  1. viernes, 6 de noviembre de 2009 a las 05:35 | #1

    Thanks! This helped us but we had to add the missing caurina and PV3D classes as well. :)

  2. Jake
    lunes, 30 de noviembre de 2009 a las 09:18 | #2

    What is the missing code as i can’t seem to get the example working. Thanks

  3. lunes, 30 de noviembre de 2009 a las 09:40 | #3

    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.

  4. miércoles, 6 de enero de 2010 a las 18:29 | #4

    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

  5. miércoles, 6 de enero de 2010 a las 19:44 | #5

    Hi Phaze, now you could download the example for cs3. http://www.miguelmoraleda.com/examples/daeInteractive.rar Good Luck

*

Spam Protection by WP-SpamFree

Get Adobe Flash playerPlugin by wpburn.com wordpress themes