AS3Dmod: utilización básica con Papervision

AS3Dmod: utilización básica con Papervision

Etiquetas: Bend ModifierStack Phase LibraryPv3d viewport3D BasicRenderEngine Plane

Imagen en reemplazo de flash

AS3Dmod es una libreria de modificadores para objetos 3D. Actualmente AS3Dmod dispone de 7 modificadores (doblar, deformar...) que funcionan con Papervision3D, Away3D, Sandy3D y Alternativa3D. Aunque hay muy poca documentación (sobre todo en castellano), es bastante fácil de utilizar. Los pasos para poder utilizarla son los siguientes:

-Descargar AS3Dmod:

Logo de AS3Dmod

-Saber utilizar alguno de los 4 motores 3D compatibles. Puedes ver tutoriales de Papervision3D y Away3D en esta misma página.

-Una vez tenemos nuestra escena 3D en alguno de los motores, creamos una instancia de ModifierStack. El "modifier stack" es un link entre el objeto que queremos modificar y los modificadores:

  1. mstack = new ModifierStack(new LibraryPv3d(), plano);

Podemos ver como se pasan como parámetro un objeto indicando la librería que vamos a utilizar (en este caso Papervision), y el objeto que vamos a modificar (un plano).

-Ahora necesitamos crear un modificador, y añadirlo a mstack. Para el ejemplo he utilizado "Bend", que recibe como parámetros la fuerza y el lugar donde se aplica:

  1.  
  2. bend = new Bend(0, 1);
  1. mstack.addModifier(bend); 

-Por último, cada vez que se haga un cambio en el modificardor, debemos aplicarlo (algo asi como ordenar que se renderice):

  1. mstack.apply();

Para este ejemplo he utilizado una clase de AS3Dmod que se llama Phase. Esta clase sirve para crear una animación tipo seno. Es decir, nosotros incrementamos su valor, y ella controla de que siempre esté entre -1 y 1. Es decir, si incrementamos su valor en 0.5 en cada fotograma, cuando llegue a 1 volverá sobre sus pasos hasta valer -1, y viceversa.

Este es el código completo comentado:


  1. package{
  2.  
  3. 	//CLASES
  4. 	//Flash
  5. 	import flash.display.MovieClip;
  6. 	import flash.events.Event;
  7. 	//PPV3D
  8. 	import org.papervision3d.view.Viewport3D;
  9.    	import org.papervision3d.cameras.Camera3D;
  10. 	import org.papervision3d.scenes.Scene3D;
  11. 	import org.papervision3d.render.BasicRenderEngine;
  12. 	import org.papervision3d.materials.WireframeMaterial;
  13. 	import org.papervision3d.objects.primitives.Plane;
  14. 	//AS3Dmod
  15. 	import com.as3dmod.modifiers.Bend;
  16. 	import com.as3dmod.ModifierStack;
  17. 	import com.as3dmod.plugins.pv3d.LibraryPv3d;
  18. 	import com.as3dmod.util.Phase;
  19.  
  20. 	public class EjemploAS3MOD extends MovieClip{
  21.  
  22. 		//PPV3D
  23. 		private var escena:Scene3D;
  24. 		private var renderer:BasicRenderEngine;
  25. 		private var camara:Camera3D;
  26. 		private var viewport:Viewport3D;
  27. 		private var plano:Plane
  28. 		//AS3Dmod
  29. 		private var bend:Bend;
  30. 		private var mstack:ModifierStack;
  31. 		private var phase = new Phase();
  32.  
  33.  
  34. 		public function EjemploAS3MOD(){
  35. 			crear3D();
  36. 			crearModificadores();
  37. 			addEventListener(Event.ENTER_FRAME, renderizar);
  38. 		}
  39.  
  40. 		public function crear3D():void{
  41. 			//Creo escena
  42. 			escena = new Scene3D();
  43. 			renderer = new BasicRenderEngine();
  44. 			camara = new Camera3D();
  45. 			viewport = new Viewport3D(700,400);
  46. 			addChild(viewport);
  47. 			camara.z = -800;
  48. 			//Creo material y plano
  49. 			var material:WireframeMaterial = new WireframeMaterial(0x000000);
  50. 			material.doubleSided = true;
  51. 			plano = new Plane(material,700,380,12,8);
  52. 			plano.rotationZ = 90;
  53. 			escena.addChild(plano);
  54. 		}
  55.  
  56. 		public function crearModificadores():void{
  57. 			//Modificador para PPV3D, aplicado sobre plano
  58. 			mstack = new ModifierStack(new LibraryPv3d(), plano);
  59. 			//Creo un modificador tipo Bend, y lo añado a mstack
  60. 			bend = new Bend(0, 1);
  61. 			mstack.addModifier(bend);
  62. 		}
  63.  
  64. 		private function renderizar(e:Event):void{
  65. 			//Aumento el valor de phase, para aplicarlo a la "fuerza" de bend, 
  66. 			//aplico los cambios y renderizo. 
  67. 			phase.value += .05;
  68. 			bend.force = phase.phasedValue;
  69. 			mstack.apply();
  70. 			renderer.renderScene(escena, camara, viewport);
  71. 		}
  72.  
  73. 	}
  74. }

Descargar archivos

Comentarios
    • Autor
    • paranoio
    Te felicito por tu blog tiene informacion interesante para los que iniciamos con ppv3d.
    • Autor
    • esedeerre

    Gracias!!!

    Por cierto, se admiten peticiones para próximos ejemplos.
    • Autor
    • Jovane
    Peticiones???? Bueno abusando de la confianza, sera posible que expliques como hacer un escenario3d? similar al utilizado con el mar en la web de papervision y bueno pues felicidades por esta excelente pagina, tiene mucho material y de buena calidad. continua asi. :)
    • Autor
    • manuel
    hola esedeerre, quisiera saber si es posible que me ayudaras con una cuestion, es que estoy realizando un proyecto y necesito el uso de 3D, e leido de Papervision pero me cuesta implementarlo, mi proyecto consta de lo siguiente, un modelo hecho en 3D Max, un esqueleto humano, quisiera saber como puedo exportarlo a Flash, para utilizarlo a mi gusto muchisimas gracias x todo, me e guiado de esta pagina hasta mas no poder muchas cosas me han servido, otras no tanto, o no e sabido usarlas espero tu pronta respuesta
    • Autor
    • esedeerre

    Hola Manuel, puedes exportar el modelo como DAE y después cargarlo con Papervision

    Tienes un ejemplo con SketchUp aqui: http://www.esedeerre.com/ejemplo/10/113/materiales-interactivos-en-papervision-greatwhite-parte-ii

    • Autor
    • Diego Quinteros
    Muy buen ejemplo... Estoy pensando en cómo hacer un FlipBook 3D, como los pocos que hay por ahí; para lo que este movimiento me viene como anillo al dedo...Además, lo he visto funcionar por ahí: en lugar de la trama de triángulos se llena con Imágenes externas. Muy buen site!
Dejar un comentario
Tu nombre (obligatorio):

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

Web:

Comentario: