classes
SimpleDisplacerAW.as
package sk.yoz.displacing
{
import away3dlite.cameras.Camera3D;
import away3dlite.containers.Scene3D;
import away3dlite.containers.View3D;
import away3dlite.core.render.FastRenderer;
import away3dlite.core.render.Renderer;
import away3dlite.materials.BitmapMaterial;
import away3dlite.primitives.Plane;
import flash.display.BitmapData;
public class SimpleDisplacerAW extends AbstractDisplacer
{
public var viewport:View3D;
public var scene:Scene3D;
public var camera:Camera3D;
public var renderer:Renderer;
public var viewportWidth:Number;
public var viewportHeight:Number;
public var plane:Plane;
public var depth:Number = 100;
public var segmentsW:uint = 15;
public var segmentsH:uint = 15;
public function SimpleDisplacerAW(
viewportWidth:Number, viewportHeight:Number,
image:BitmapData, map:BitmapData,
rotationXMax:Number = 30, rotationYMax:Number = 30,
depth:Number = 100, segmentsW:uint = 15, segmentsH:uint = 15):void
{
super(image, map, rotationXMax, rotationYMax, 0, 0);
this.viewportWidth = viewportWidth;
this.viewportHeight = viewportHeight;
this.depth = depth || this.depth;
this.segmentsW = segmentsW || this.segmentsW;
this.segmentsH = segmentsH || this.segmentsH;
scene = new Scene3D();
camera = new Camera3D();
camera.z = -1000;
renderer = new FastRenderer();
viewport = new View3D(scene, camera, renderer);
viewport.x = viewportWidth / 2;
viewport.y = viewportHeight / 2;
addChild(viewport);
plane = new Plane(material, image.width, image.height,
this.segmentsW, this.segmentsH, false);
plane.bothsides = false;
var length:uint = plane.vertices.length;
var x:Number, y:Number;
var color:uint;
var w:Number = (image.width - 1) / 2;
var h:Number = (image.height - 1) / 2;
for(var i:uint = 0; i < length; i+=3)
{
x = plane.vertices[i];
y = plane.vertices[i+1];
color = map.getPixel(w + x, h + y);
plane.vertices[i+2] = -(color >> 16) / 0xff * this.depth;
}
scene.addChild(plane);
}
protected function get material():BitmapMaterial
{
var material:BitmapMaterial = new BitmapMaterial(image);
material.smooth = true;
return material;
}
override public function set rotX(value:Number):void
{
super.rotX = value;
plane.rotationX = -value;
}
override public function set rotY(value:Number):void
{
super.rotY = value;
plane.rotationY = value;
}
override public function render():void
{
super.render();
viewport.render();
}
}
}