Experimento: APE + Papervision

Experimento: APE + Papervision

Imagen en reemplazo de flash
Este es mi primer experimento con APE + Papervision. Puedes ver el resultado a pantalla completa aquí.

  1. //////////////////////////////////////////////////////////////////////////////
  2. //CLASES
  3.  
  4. //APE
  5. import org.cove.ape.*;
  6. import flash.events.Event;
  7. import flash.events.KeyboardEvent;
  8. import flash.display.Sprite;
  9.  
  10. //PPV
  11. import org.papervision3d.view.Viewport3D;
  12. import org.papervision3d.cameras.*;
  13. import org.papervision3d.scenes.Scene3D;
  14. import org.papervision3d.render.BasicRenderEngine;
  15. import org.papervision3d.objects.primitives.*;
  16. import org.papervision3d.materials.*;
  17. import org.papervision3d.materials.utils.MaterialsList;
  18. import org.papervision3d.core.geom.renderables.Vertex3D;
  19. import org.papervision3d.objects.DisplayObject3D;
  20.  
  21. //FLASH
  22. import flash.display.BitmapData;
  23.  
  24. //////////////////////////////////////////////////////////////////////////////
  25. //VARIABLES
  26.  
  27. //PPV
  28. var material:MovieMaterial = new MovieMaterial( Material1_mc);
  29. var viewport:Viewport3D;
  30. var renderer:BasicRenderEngine;
  31. var escena:Scene3D;
  32. var camara:FreeCamera3D;
  33. var movieMaterial:MovieMaterial;
  34. var listaMateriales:MaterialsList = new MaterialsList({all:material});
  35. var ref_object3D:DisplayObject3D;
  36. var profEscena:Number = 100;
  37.  
  38. //APE
  39. var grupoColisiones:Group;
  40.  
  41. //FLASH
  42. var matAPE:Array = new Array();
  43. var matPPV:Array = new Array();
  44. stage.quality = StageQuality.LOW;
  45.  
  46. //////////////////////////////////////////////////////////////////////////////
  47. //FUNCIONES
  48. //Inicializa la escena
  49. function Empezar() {
  50. 	//FLASH
  51. 	CrearFPS();
  52.  
  53. 	//PPV
  54. 	CrearPapervision(1000, 600);
  55. 	CrearEventos();
  56.  
  57. 	//APE
  58. 	CrearAPE();
  59. 	CrearEscenarioAPE();
  60.  
  61. 	addEventListener(Event.ENTER_FRAME, Renderizar);
  62. }
  63.  
  64. function CrearFPS() {
  65. 	var FPS = new FrameRate();
  66. 	FPS.setColor(0xffffff);
  67. 	addChild(FPS);
  68. }
  69.  
  70. //Crea el escenario APE
  71. function CrearAPE() {
  72. 	APEngine.init(1/4);
  73. 	var contenedor:MovieClip = new MovieClip();
  74. 	APEngine.container = contenedor;
  75. 	contenedor.alpha = 0;
  76. 	addChild(contenedor);
  77. 	APEngine.addForce(new VectorForce(false,0,2));
  78. 	grupoColisiones = new Group();
  79. 	APEngine.addGroup(grupoColisiones);
  80. 	grupoColisiones.collideInternal = true;
  81. }
  82.  
  83. function CrearPapervision(vpWidth:Number, vpHeight:Number):void {
  84. 	viewport = new Viewport3D(vpWidth, vpHeight);
  85. 	addChild(viewport);
  86. 	renderer = new BasicRenderEngine();
  87. 	escena = new Scene3D();
  88. 	camara = new FreeCamera3D();
  89. 	camara.zoom = 4;
  90. 	camara.x = -400;
  91. 	camara.y = -150;
  92. }
  93.  
  94. //En esta función se realizan los movimientos de objetos de la escena antes de renderizar.
  95. //En este caso muevo todos los vertices del cubo para generar el efecto de fluidez
  96. function MoverPPV() {
  97. 	for(var i = 0; i < matAPE.length; i++){
  98. 		if(matAPE[i].py > 1000){
  99. 			matAPE[i].py =-200;
  100. 			matAPE[i].px = Math.random() * 400 +150;
  101. 		}
  102. 		matPPV[i].x =-matAPE[i].px
  103. 		matPPV[i].y =-matAPE[i].py
  104. 	}
  105. 	camara.z = Math.cos(mouseX/300) * 150- 500;
  106. }
  107.  
  108. //Añade los eventos necesarios a la escena.
  109. function CrearEventos():void {
  110. 	addEventListener(Event.ENTER_FRAME, Renderizar);
  111. }
  112.  
  113. //Crea los elementos del escenario
  114. function CrearEscenarioAPE() {
  115. 	//Creo un suelo y dos paredes
  116. 	CrearRectangulo(400,400,350,100,Math.PI,true,1,0.1,0);
  117. 	CrearRectangulo(400,50,10,200,Math.PI/4,true,1,0.1,0);
  118.  
  119. 	CrearRectangulo(200,200,10,200,-Math.PI/4,true,1,0.1,0);
  120. 	CrearRectangulo(600,150,10,200,5*Math.PI/4,true,1,0.1,0);
  121. 	//Creo un Timer para que cree circulos de tamaño aleatorio (se va a ejecutar 100 veces, una cada 500 ms)
  122. 	var tiempo = new Timer(500,50);
  123. 	tiempo.addEventListener("timer",Circulo);
  124. 	function Circulo(event:TimerEvent):void {
  125. 		CrearCirculo(Math.random() * 400 +150,-200 ,Math.random() * 30 + 5 ,false,1,0.5,0);
  126. 	}
  127. 	tiempo.start();
  128. }
  129.  
  130. function CrearRectangulo(X,Y,ancho,alto,rot,est,masa,ela,fri) {
  131. 	var rp:RectangleParticle = new RectangleParticle(X,Y,ancho,alto,rot,est,masa,ela,fri);
  132. 	grupoColisiones.addParticle(rp);
  133.  
  134. 	var cubo =  new Cube( listaMateriales, ancho, profEscena,alto , 2, 2, 2);
  135. 	cubo.x = -X;
  136. 	cubo.y = -Y;
  137. 	cubo.rotationZ = rot*(180/Math.PI);
  138. 	escena.addChild(cubo);
  139. }
  140.  
  141. function CrearCirculo(X,Y,radio,est,masa,ela,fri) {
  142. 	var circ = new CircleParticle(X,Y,radio,est,masa,ela,fri);
  143. 	matAPE.push(circ);
  144. 	grupoColisiones.addParticle(circ);
  145.  
  146. 	var esf:Sphere = new Sphere(material,radio,6,6);
  147. 	matPPV.push(esf);
  148. 	escena.addChild(esf);
  149. }
  150.  
  151. //Ejecuta el APEngine en cada enterFrame
  152. function MoverAPE():void {
  153. 	APEngine.step();
  154. 	//APEngine.paint();
  155. }
  156.  
  157. function Renderizar(e:Event):void {
  158. 	MoverAPE();
  159. 	MoverPPV();
  160. 	renderer.renderScene(escena, camara, viewport);
  161. }
  162. //Empezamos
  163. Empezar();
Comentarios

    No hay comentarios

Dejar un comentario
Tu nombre (obligatorio):

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

Web:

Comentario: