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:

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: AS3, Papervision3d