Papervision GreatWhite: Tipos de Shader

Papervision GreatWhite: Tipos de Shader

Etiquetas: PointLight3D GouraudShader FlatShader CellShader PhongShader ShadedMaterial

Imagen en reemplazo de flash

Una de las novedades de Papervision GreatWhite son los ShadedMaterial.

Para utilizarlos basta con seguir los siguientes pasos:

1. Crear un material de tipo BitmapMaterial
2.Crear una luz para la escena
3.Crear un Shader de cualquiera de los 4 tipos disponibles
4. Crear un ShadedMaterial a partir del Bitmap y el Shader
5. Crear un objeto con el ShadedMaterial

Podemos utilizar los 4 tipos de Shader utilizando los siguientes parámetros*:

-LightObject3D, es decir, la luz que hemos creado en el paso 2.
-lightColor: el color de la luz que hemos creado
-ambientColor: el color de la luz ambiente

*Algunos de los Shaders tienen otros parámetros opcionales, que pueden verse en la documentación del GreatWhite.

Los 4 tipos de Shaders disponibles son:

FlatShader: el más simple de todos. Menos realista, pero mejor rendimiento:

FlatShader

CellShader: crea una especie de "efecto linterna".

Papervision CellShader

GouraudShader: mas realismo y consumo del procesador.

Papervision GouraudShader

PhongShader: permite crear los efectos más realistas. Posee varios parámetros opcionales. Es el que consume mas recursos.

Papervision PhongShader

Este es un ejemplo de utilización de los Shaders:

  1. package{
  2.  
  3. 	import flash.display.*
  4.  
  5. 	public class EjemploShaders extends MovieClip{
  6.  
  7. 		import flash.display.Sprite;
  8. 		import flash.events.Event;
  9. 		import flash.display.BitmapData;
  10.  
  11. 		import org.papervision3d.cameras.Camera3D;
  12. 		import org.papervision3d.lights.PointLight3D;
  13. 		import org.papervision3d.view.Viewport3D;
  14.     	import org.papervision3d.cameras.Camera3D;
  15. 		import org.papervision3d.scenes.Scene3D;
  16. 		import org.papervision3d.render.BasicRenderEngine;
  17. 		import org.papervision3d.materials.shaders.*;
  18. 		import org.papervision3d.materials.shadematerials.*;
  19. 		import org.papervision3d.materials.BitmapMaterial;
  20. 		import org.papervision3d.objects.primitives.Sphere;
  21.  
  22. 		var escena:Scene3D;
  23. 		var renderer:BasicRenderEngine;
  24. 		var camara:Camera3D;
  25. 		var viewport:Viewport3D;
  26.  
  27. 		var esfera:Sphere;
  28. 		var luz:PointLight3D;
  29.  
  30. 		public function EjemploShaders(){
  31. 			init();
  32. 		}
  33.  
  34. 		public function init():void{
  35. 			escena = new Scene3D();
  36. 			renderer = new BasicRenderEngine();
  37. 			camara = new Camera3D();
  38. 			viewport = new Viewport3D(400,400);
  39. 			addChild(viewport);
  40. 			camara.z = -500;
  41.  
  42. 			//Creo un BitmapData a partir de una imagen que tengo linkaad en la biblioteca con el nombre de materialBiblioteca
  43. 			var bitmapTierra:BitmapData = new materialBiblioteca(0,0);
  44.  
  45. 			//Creo un BitmapMaterial con el objeto anterior
  46. 			var materialTierra:BitmapMaterial = new BitmapMaterial(bitmapTierra);
  47.  
  48. 			//Para crear ShadedMaterials necesitamos:
  49. 			// 1. Una Luz, en este caso "luz"
  50. 			// 2. Un Shader, en este caso cualquiera de los materiales "shader", ya sea FlatShader, CellShader...
  51. 			// 3. Un ShadedMaterial, creado a partir del Shader y un BitmapData.
  52.  
  53. 			//1. La luz
  54. 			luz = new PointLight3D;
  55. 			luz.z = -1000000;
  56. 			luz.x = 1500000;
  57. 			escena.addChild(luz);
  58.  
  59. 			//2. Los Shader. Para probarlos basta con comentar/descomentar las lineas
  60. 			//var shader:FlatShader = new FlatShader(luz,0xffffff,0x222222);
  61. 			//var shader:CellShader = new CellShader(luz,0xffffff,0x222222);
  62. 			var shader:GouraudShader = new GouraudShader(luz,0xffffff,0x222222);
  63. 			//var shader:PhongShader = new PhongShader(luz,0xffffff,0x222222);
  64.  
  65. 			//3. El ShadedMaterial
  66. 			var shadeMat:ShadedMaterial = new ShadedMaterial(materialTierra,shader)
  67.  
  68. 			//Creo la esfera con el ShadedMaterial
  69. 			esfera = new Sphere(shadeMat, 200, 10, 10);
  70. 			escena.addChild(esfera);
  71.  
  72. 			addEventListener(Event.ENTER_FRAME, renderizar);
  73. 		}
  74.  
  75. 		private function renderizar(e:Event):void{
  76. 			esfera.yaw(1);	
  77. 			renderer.renderScene(escena, camara, viewport);
  78. 		}
  79. 	}
  80. }

Descargar archivos

Comentarios
    • Autor
    • alex
    donde bajo el PPV 2.0 y como configuro la ruta de la classe
    • Autor
    • esedeeere

    Aquí tienes el repositorio e instrucciones para instalarlo:

    http://code.google.com/p/papervision3d/

Dejar un comentario
Tu nombre (obligatorio):

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

Web:

Comentario: