package away3d.extrusions { import flash.display.BitmapData; import away3d.core.math.Number3D; import away3d.core.base.*; /** * Class ElevationModifier updates the vertexes of a flat Mesh such as a Plane, RegularPolygon with a bimap information * */ public class ElevationModifier { private var _mesh:Mesh; private var _channel:String; private var _elevate:Number; private var _sourceBmd:BitmapData; private var _axis:String; public function ElevationModifier() { } /** * Updates the vertexes of a Mesh on the z axis according to color information stored into a BitmapData * * @param sourceBmd Bitmapdata. The bitmapData to read from. * @param mesh Object3D. The mesh Object3D to be updated. * @param channel [optional] String. The channel information to read. supported "a", alpha, "r", red, "g", green, "b", blue and "av" (averages and luminance). Default is red channel "r". * @param elevate [optional] Number. The scale multiplier along the z axis. Default is .5. * @param axis [optional] String. The axis to influence. Default is "z". */ public function update(sourceBmd:BitmapData, mesh:Object3D, channel:String = "r", elevate:Number = .5, axis:String = "z"):void { if((mesh as Mesh).geometry.faces != null){ var i:int = 0; _channel = channel.toLowerCase(); _elevate = elevate; _sourceBmd = sourceBmd; _mesh = (mesh as Mesh); _axis = axis; var flist:Array = _mesh.geometry.faces; var face:Face; var vr0:Vertex; var vr1:Vertex; var vr2:Vertex; var u0:Number; var u1:Number; var u2:Number; var v0:Number; var v1:Number; var v2:Number; var w:Number = sourceBmd.width; var h:Number = sourceBmd.height; for(i = 0;i> 24 & 0xFF; break; case "r": cha = color >> 16 & 0xFF; break; case "g": cha = color >> 8 & 0xFF; break; case "b": cha = color & 0xFF; break; case "av": cha = ((color >> 16 & 0xFF)*0.212671) + ((color >> 8 & 0xFF)*0.715160) + ((color >> 8 & 0xFF)*0.072169); } switch(_axis){ case "x": _mesh.updateVertex(vertex, cha*_elevate, vertex.y, vertex.z , false); break; case "y": _mesh.updateVertex(vertex, vertex.x, cha*_elevate, vertex.z , false); break; case "z": _mesh.updateVertex(vertex, vertex.x, vertex.y ,cha*_elevate, false); break; } } } }