Posts de la categoría ‘Papervision3d’

Reflejos en Papervision3D 2.0

22 de diciembre de 2009 // Publicado en Actionscript 3.0, Flash, Papervision3d

He encontrado muchas maneras de hacer reflejos con Papervision3D. Básicamente se basan en que, si para una escena normal, tendríamos un viewport y una cámara, para una escena con reflejos, tendríamos múltiples viewports y cámaras. Por ejemplo, para crear una reflexión en el suelo, pondríamos una cámara enfocando la escena desde abajo (por debajo del plano del suelo). Luego, al renderizar la vista principal, proyectaríamos en el plano correspondiente al suelo la vista captada por la cámara situada abajo.

Esto es bastante engorroso, ya que, a parte de haber mucha información y muchas maneras de hacerlo, para cada versión de Papervision3D las funcionalidades cambian (diferentes tipos de viewports, cámaras, etc.). Pero por lo visto, en la última versión, existe una clase llamada ReflectionView, extendida de BasicView, que te permite hacer reflejos automáticamente sin preocuparte de colocar viewports, cámaras adicionales, declararlos, etc.

Para usarla, podemos hacerlo creando una clase que extienda de ésta. Para ello:

  • Importarla

[as3]import org.papervision3d.core.effects.view.ReflectionView;[/as3]

  • Creación clase

[as3]
public class PV3D_ReflectionViewExtension extends ReflectionView
{
// (…)
}
[/as3]

  • Constructor

[as3]super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);[/as3]

  • Renderizar

[as3]singleRender();[/as3]

Aquí una captura de las pruebas que he estado haciendo con esta clase:

RedrumPV3D

Y unos links de interés:

+info: Reflejos en Papervision3D 2.0 (pt. 2)

Tags: ,

Reflejos en Papervision3D 2.0 (pt.2)

22 de diciembre de 2009 // Publicado en Actionscript 3.0, Papervision3d

En el anterior post comentaba el uso de la clase ReflectionView para crear reflejos en una escena. Creo que el inconveniente es que no te permite aplicar un degradado al reflejo para que el efecto sea más real. Simplemente refleja todos los objetos de la escena “visibles” por el viewport.

Hay otra forma de hacerlo, usando matrices de transformación, para crear manualmente el reflejo de cualquier bitmap,aplicarle un degradado (configurable), etc. El efecto es el siguiente:

Redrum

Aquí el código:

[as3]
private function generateReflection(bmp:BitmapData, alpha:Number = 0.3, gradientRatio:Number = 0):BitmapData
{
// Creamos superficie real
var reflectedBmp:BitmapData = new BitmapData(bmp.width, bmp.height*2, false, 0);
reflectedBmp.draw(bmp);

// Creamos reflejo
var flipMatrix:Matrix = new Matrix(1, 0, 0, -1, 0, bmp.height*2 + 4);
reflectedBmp.draw(bmp, flipMatrix, new ColorTransform(alpha, alpha, alpha, 1, 0, 0, 0, 0));

var holder:Shape = new Shape();
var gradientMatrix:Matrix = new Matrix();
gradientMatrix.createGradientBox(bmp.width, bmp.height, Math.PI*.5, 0, -gradientRatio*bmp.height);

// Aplicamos un gradiente al reflejo
holder.graphics.beginGradientFill(GradientType.LINEAR, [ 0, 0 ], [ 0, 100 ], [ 0, 0xFF ], gradientMatrix);
holder.graphics.drawRect(0, 0, bmp.width, bmp.height);
holder.graphics.endFill();

var m:Matrix = new Matrix();
m.translate(0, bmp.height);
reflectedBmp.draw(holder, m);

return reflectedBmp;
}
[/as3]

Y para cada superficie que queramos reflejar, haremos lo siguiente:

[as3]
var wallMaterial:BitmapMaterial = new BitmapMaterial(generateReflection(wallBitmap.bitmapData, 0.6, 0.6));
wall_front = new Plane( wallMaterial, iFloorWidth, 2*iWallHeight, 10, 10 );
[/as3]

Como clase base usaremos la BasicView, ya que ya no necesitaremos las funcionalidades de ReflectionView.

Tags: ,

Reflejos en Papervison3D (pt2)

18 de octubre de 2009 // Publicado en Actionscript 3.0, Papervision3d

Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source.

Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of “de Finibus Bonorum et Malorum” (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, “Lorem ipsum dolor sit amet..”, comes from a line in section 1.10.32.
3D

Tags: ,