Papervision 2.0a Greatwhite: Sombras

Etiquetas: Viewport3D BasicRenderEngine PointLight3D ViewPort3D GouraudMaterial

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í

//////////////////////////////////////////////////////////////////////////////////////
//CLASES
 
import org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.materials.shadematerials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.core.geom.renderables.Vertex3D
import org.papervision3d.objects.DisplayObject3D;
import flash.display.BitmapData;
import org.papervision3d.lights.*;
 
 
//////////////////////////////////////////////////////////////////////////////////////
//VARIABLES
 
var viewport:Viewport3D;
var renderer:BasicRenderEngine;
var escena:Scene3D;
var camara:Camera3D;
var listaMateriales:MaterialsList = new MaterialsList();
var cubo:DisplayObject3D;
var luz:PointLight3D;
stage.quality = StageQuality.LOW;
 
//////////////////////////////////////////////////////////////////////////////////////
//FUNCIONES
//Esta función es la que invocamos al comenzar. Sería la constructora de la escena
 
function Empezar(vpWidth:Number = 700, vpHeight:Number = 400):void {
	CrearPapervision(vpWidth, vpHeight);
	CrearObjetos();
	CrearEventos();
	PonerFrameRate();
}
 
//Añado una instancia de mi clase FrameRate, en color blanco. 
function PonerFrameRate(){
	var FPS = new FrameRate();
	FPS.setColor(0xffffff);
	addChild(FPS);
}
 
//Crea los elementos necesarios de la escena PPV
function CrearPapervision(vpWidth:Number, vpHeight:Number):void {
	//Este va a ser el "contenedor" que nos va a permitir visualizar la escena. Es el 
	//objeto a través del cual visualizamos la escena 3D. Hay que especificarle un ancho y un alto. 
	viewport = new Viewport3D(vpWidth, vpHeight);
	addChild(viewport);
	//El renderer es el objeto que se encarga de renderizar la escena. Cada vez que se produce un cambio 
	//Hay que volver a renderizar. Esto se hace en la funcion "Renderizar". 
	renderer = new BasicRenderEngine();
	escena = new Scene3D();
	camara = new Camera3D();
	camara.zoom = 3
}
 
//Crea todos los objetos que queremos añadir a la escena (en este caso un cubo). 
function CrearObjetos() {
	//Este es el objeto que va a generar el efecto de luz en el escenario. 
	luz = new PointLight3D();
	luz.x = -200;
	luz.y = 0;
	luz.z = -200;
 
	//Creo un material a partir de un clip que hay en el escenario. Los parámetros son el 
	//objeto PointLight3D, el color de la luz que emite el foco, y el color de la luz en el escenario. 
	var material:GouraudMaterial = new GouraudMaterial(luz, 0xffffff, 0x000000);
 
	//Creo el cubo
	cubo =  new Cube( new MaterialsList({all:material}),500, 500, 500, 2, 2, 2);
	escena.addChild(cubo);
}
 
//En esta función se realizan los movimientos de objetos de la escena antes de renderizar. 
//En este caso muevo todos los vertices del cubo para generar el efecto de fluidez
function Mover() {
	cubo.rotationY += ((mouseX - 300) - cubo.rotationY)/4;
	cubo.rotationX += ((mouseY - 300) - cubo.rotationX)/4;
}
 
//Añade los eventos necesarios a la escena. 
function CrearEventos():void {
	addEventListener(Event.ENTER_FRAME, Renderizar);
}
 
//Hace los cambios necesarios en la escena a través de la función mover, y después
//renderiza la escena. 
function Renderizar(e:Event):void {
	Mover();
	renderer.renderScene(escena, camara, viewport);
}
 
////////////////////////////////////////////////////////////////////////////////////////
//Empezamos
 
Empezar();

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

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: