Utilizar materiales interactivos en Papervision GreatWhite

Utilizar materiales interactivos en Papervision GreatWhite

Etiquetas: InteractiveScene3DEvent BasicRenderEngine Viewport3D displayObject3D

Imagen en reemplazo de flash
Para utilizar eventos de ratón sobre objetos en Papervision GreatWhite, tenemos que hacer tres cosas:

-Crear un objeto Viewport3D con el atributo interactive = true
/
-Crear un objeto y poner el atributo interactive de su material = true

-Añadir los eventos al objeto

El código comentado, tras el salto.

  1. package{
  2.  
  3. 	import flash.display.*
  4.  
  5. 	public class Materiales extends MovieClip{
  6.  
  7. 		import flash.events.Event;
  8. 		import flash.text.*;
  9.  
  10. 		import org.papervision3d.view.Viewport3D;
  11.     	import org.papervision3d.cameras.Camera3D;
  12. 		import org.papervision3d.scenes.Scene3D;
  13. 		import org.papervision3d.render.BasicRenderEngine;
  14. 		import org.papervision3d.materials.*;
  15. 		import org.papervision3d.objects.primitives.Sphere;
  16. 		import org.papervision3d.events.InteractiveScene3DEvent;
  17.  
  18. 		var escena:Scene3D;
  19. 		var renderer:BasicRenderEngine;
  20. 		var camara:Camera3D;
  21. 		var viewport:Viewport3D;
  22.  
  23. 		var esfera:Sphere;
  24.  
  25. 		public function Materiales(){
  26. 			crear3D();
  27. 			crearObjeto();
  28. 		}
  29.  
  30. 		public function crear3D():void{
  31. 			escena = new Scene3D();
  32. 			renderer = new BasicRenderEngine();
  33. 			camara = new Camera3D();
  34. 			//El cuarto parámetro que paso en el constructor es para la propiedad interactive de viewPort. 
  35. 			//Si se van a utilizar eventos de ratón, hay que pasar 'true' (por defecto 'false')
  36. 			viewport = new Viewport3D(500,500,false,true);
  37. 			addChild(viewport);
  38. 			camara.z = -500;
  39. 			addEventListener(Event.ENTER_FRAME, renderizar);
  40. 		}
  41.  
  42. 		public function crearObjeto():void{
  43. 			var material:MovieAssetMaterial = new MovieAssetMaterial("MaterialBiblioteca");
  44. 			//El material usado en el objeto interactivo debe tener interactive = true (por defecto 'false')
  45. 			material.interactive = true;
  46. 			esfera = new Sphere(material, 200, 10, 10);
  47. 			//Por último, se añaden los eventos
  48. 			esfera.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,esferaPresionada);
  49. 			esfera.addEventListener(InteractiveScene3DEvent.OBJECT_OVER,esferaOver);
  50. 			esfera.addEventListener(InteractiveScene3DEvent.OBJECT_OUT,esferaOut);
  51. 			escena.addChild(esfera);
  52. 		}
  53.  
  54. 		private function esferaPresionada(e:InteractiveScene3DEvent):void{
  55. 			//La función recoge el parámetro e, que tiene el atributo displayObject3D;
  56. 			Texto_txt.text = "Click sobre la esfera " +  e.displayObject3D;
  57. 		}
  58.  
  59. 		private function esferaOver(e:InteractiveScene3DEvent):void{
  60. 			Texto_txt.text = "Over sobre la esfera";
  61. 		}
  62.  
  63. 		private function esferaOut(e:InteractiveScene3DEvent):void{
  64. 			Texto_txt.text = "Out sobre la esfera";
  65. 		}
  66.  
  67. 		private function renderizar(e:Event):void{
  68. 			esfera.yaw(1);	
  69. 			renderer.renderScene(escena, camara, viewport);
  70. 		}
  71.  
  72. 	}
  73. }

Descargar archivos

Comentarios
    • Autor
    • bishoport
    Muy buenas, mil gracias por tu web, doy clases en una academia y uso tus ejemplos para las clases porque son muy didácticos. Tengo un problema con la interactividad. Este ejemplo funciona perfectamente, pero si creo una clase a parte para crear la esfera y paso como parametro el material, (extiendo esta clase de DisplayObject3D), la esfera sale pero se pierde la interactividad. ¿Se te ocurre algo? Gracias
    • Autor
    • Pablo
    Geniale tus ejemplos. Y buenisima tu web. Me has ayudado mucho mas de una vez!!
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: