Papervision 2.0a Greatwhite: Sombras

Papervision 2.0a Greatwhite: Sombras

Etiquetas: Viewport3D BasicRenderEngine PointLight3D ViewPort3D GouraudMaterial

Imagen en reemplazo de flash
Una de las novedades de la versión alpha de Papervision son las sombras. Para poder crear efectos de luz, debemos crear un objeto de tipo PointLight3D, y utilizar materiales especiales en los objetos (en este caso u material de tipo GouraudMaterial). El resto es igual que en una plantilla normal de PPV3D.

Puedes verlo a pantalla completa aquí

  1. //////////////////////////////////////////////////////////////////////////////////////
  2. //CLASES
  3.  
  4. import org.papervision3d.view.Viewport3D;
  5. import org.papervision3d.cameras.*;
  6. import org.papervision3d.scenes.Scene3D;
  7. import org.papervision3d.render.BasicRenderEngine;
  8. import org.papervision3d.objects.primitives.Cube;
  9. import org.papervision3d.materials.shadematerials.*;
  10. import org.papervision3d.materials.utils.MaterialsList;
  11. import org.papervision3d.core.geom.renderables.Vertex3D
  12. import org.papervision3d.objects.DisplayObject3D;
  13. import flash.display.BitmapData;
  14. import org.papervision3d.lights.*;
  15.  
  16.  
  17. //////////////////////////////////////////////////////////////////////////////////////
  18. //VARIABLES
  19.  
  20. var viewport:Viewport3D;
  21. var renderer:BasicRenderEngine;
  22. var escena:Scene3D;
  23. var camara:Camera3D;
  24. var listaMateriales:MaterialsList = new MaterialsList();
  25. var cubo:DisplayObject3D;
  26. var luz:PointLight3D;
  27. stage.quality = StageQuality.LOW;
  28.  
  29. //////////////////////////////////////////////////////////////////////////////////////
  30. //FUNCIONES
  31. //Esta función es la que invocamos al comenzar. Sería la constructora de la escena
  32.  
  33. function Empezar(vpWidth:Number = 700, vpHeight:Number = 400):void {
  34. 	CrearPapervision(vpWidth, vpHeight);
  35. 	CrearObjetos();
  36. 	CrearEventos();
  37. 	PonerFrameRate();
  38. }
  39.  
  40. //Añado una instancia de mi clase FrameRate, en color blanco. 
  41. function PonerFrameRate(){
  42. 	var FPS = new FrameRate();
  43. 	FPS.setColor(0xffffff);
  44. 	addChild(FPS);
  45. }
  46.  
  47. //Crea los elementos necesarios de la escena PPV
  48. function CrearPapervision(vpWidth:Number, vpHeight:Number):void {
  49. 	//Este va a ser el "contenedor" que nos va a permitir visualizar la escena. Es el 
  50. 	//objeto a través del cual visualizamos la escena 3D. Hay que especificarle un ancho y un alto. 
  51. 	viewport = new Viewport3D(vpWidth, vpHeight);
  52. 	addChild(viewport);
  53. 	//El renderer es el objeto que se encarga de renderizar la escena. Cada vez que se produce un cambio 
  54. 	//Hay que volver a renderizar. Esto se hace en la funcion "Renderizar". 
  55. 	renderer = new BasicRenderEngine();
  56. 	escena = new Scene3D();
  57. 	camara = new Camera3D();
  58. 	camara.zoom = 3
  59. }
  60.  
  61. //Crea todos los objetos que queremos añadir a la escena (en este caso un cubo). 
  62. function CrearObjetos() {
  63. 	//Este es el objeto que va a generar el efecto de luz en el escenario. 
  64. 	luz = new PointLight3D();
  65. 	luz.x = -200;
  66. 	luz.y = 0;
  67. 	luz.z = -200;
  68.  
  69. 	//Creo un material a partir de un clip que hay en el escenario. Los parámetros son el 
  70. 	//objeto PointLight3D, el color de la luz que emite el foco, y el color de la luz en el escenario. 
  71. 	var material:GouraudMaterial = new GouraudMaterial(luz, 0xffffff, 0x000000);
  72.  
  73. 	//Creo el cubo
  74. 	cubo =  new Cube( new MaterialsList({all:material}),500, 500, 500, 2, 2, 2);
  75. 	escena.addChild(cubo);
  76. }
  77.  
  78. //En esta función se realizan los movimientos de objetos de la escena antes de renderizar. 
  79. //En este caso muevo todos los vertices del cubo para generar el efecto de fluidez
  80. function Mover() {
  81. 	cubo.rotationY += ((mouseX - 300) - cubo.rotationY)/4;
  82. 	cubo.rotationX += ((mouseY - 300) - cubo.rotationX)/4;
  83. }
  84.  
  85. //Añade los eventos necesarios a la escena. 
  86. function CrearEventos():void {
  87. 	addEventListener(Event.ENTER_FRAME, Renderizar);
  88. }
  89.  
  90. //Hace los cambios necesarios en la escena a través de la función mover, y después
  91. //renderiza la escena. 
  92. function Renderizar(e:Event):void {
  93. 	Mover();
  94. 	renderer.renderScene(escena, camara, viewport);
  95. }
  96.  
  97. ////////////////////////////////////////////////////////////////////////////////////////
  98. //Empezamos
  99.  
  100. Empezar();

Descargar archivos

Comentarios
    • Autor
    • alex
    que version del PPV se uso para el ejemplo no puedo correrlo en PPV 2.0 Great White
    • Autor
    • esedeerre

    La versión es la alpha de greatWhite, asi que puede que algo haya cambiado

    Si quieres echalé un ojo a este otro tutorial, que está hecho con la versión estable:

    http://www.esedeerre.com/ejemplo/10/88/papervision-greatwhite-tipos-de-shader

Dejar un comentario
Tu nombre (obligatorio):

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

Web:

Comentario: