for hover cam try this http://www.brighthub.com/hubfolio/matthew-casperson/articles/66547.aspx
for plane 1:1 with flash native try http://code.google.com/p/away3d/source/browse/trunk/fp10/Examples/Away3DLite/as/src/ExPlane.as i suggest you try explore examples here to see what lite can do http://code.google.com/p/away3d/source/browse/#svn/branches/lite/bin and try request if you need some feature add to lite btw, i know 0% of haxe sry :) hth On 18 March 2010 14:49, Justin Lawerance Mills <[email protected]> wrote: > Hi > > I have been using the away3dlite haxe version. I have not downloaded from > the svn today but I think I downloaded it in the last couple of weeks or so, > I will try updating, but is the latest haXe away3Dlite online the most > recent ver that devs have? But I seem to be struggling to get a scene laid > out of planes, of images something that I have my own as3 code for in > papervision but I am wary of trying to use an as3 engine in haxe, and where > possible I prefer to use haXe and if I use papervision I loose the flash10 > advantage, I may try sandy but again it does not take advantage of flash10 > and I want as much on screen as I can, but away3Dlite does seem to be more > tricky to setup than pv or sandy, but maybe just my lack of use? > > I am using hover camera as its what is used in the example I took apart. > Maybe someone can comment on some of my issues below and save me hours of > experimentation! > > Issues: > > 1) Hover camera does not seem to be easy to set up so that all the planes > are facing it and orientated correctly, what do I need to bear in mind, what > is the best way to make sure it is setup to face the right way with correct > orientation... is it simpler to just use a standard camera. > 2) MovieMaterial, I am not sure how to set it up for animation ( not tried > yet ) and I have been having problems with getting transparency so I copied > the pixels and used the bitmapdata for a BitmapMaterial, but the image seems > to be upsidedown. I am also having problems with the inner MovieClip that > is scaled messing up the Material ( guess extensive use of cacheAsBitmap and > maybe a third layer of movieclip will help )? > 3) Plane - I am taking x and y from movieclips loaded in at run time from a > swf, but the coordinates seem wrong. Its like the scene is compleatly > flipped. Also I really want to find an easy way to take initial 2D scales > change the Z of the item then reapply scale so that it is more or less the > same as the original 2D layout... any clever equations for this?? Or should > I just put edit controls on screen and trace out settings to code back into > haXe, I know a 3d package maybe the way to go... but I don't have time to > learn blender or sketch up better. > 4) The scene seems to take a long time to start is this specific to the > haXe away3dlite version? > 5) What should I be setting yUp to... I am not completely sure what it > means. > > Enclosed is some of the code, its fairly rough test code at the moment and > not standalone its not really opensource but I suspect anyone that can set > it up could create from scratch anyway and not yet has anything fancy in > there, and I will probably change some of the classes to composite and use > hsl. If the generic Door class is fixed and it seems useful either as code > or concept feel free to add it to away, I have found it a useful concept but > not tried it in away yet, feel free to advise if there is a better/lighter > approach to doors - I prefer to get stuff working and looking right - and > then optimize. > > Anyway any thoughts? > > Cheers > > ;j > > // not yet used or tested > package net.justinfront.views; > > > import away3dlite.core.base.Object3D; > > import flash.display.DisplayObject; > import flash.geom.Rectangle; > > > enum Open > { > left; > right; > top; > bottom; > } > > > > class Door extends Object3D > { > > > public var rotate( _get_rotate, _set_rotate ): Float; > > > private var _get_rotate:Dynamic; > private var _set_rotate:Dynamic; > > private function _get_rotation_X():Float > { > return _holder.rotationX; > } > > private function _set_rotation_X( val: Float ):Float > { > > _holder.rotationX = val; > return val; > > } > > > private function _get_rotation_Y():Float > { > return _holder.rotationY; > } > > private function _set_rotation_Y( val: Float ):Float > { > > _holder.rotationY = val; > return val; > > } > > > > public function addNob( doorNob: Object3D ) > { > > _doorNob.addChild( doorNob ); > > } > > > public function addLeg( doorleg: Object3D ) > { > > _doorLeg.addChild( doorleg ); > > } > > private var _holder: Object3D; > private var _hi: Float; > private var _wide: Float; > private var _mc: DisplayObject; > private var _orientationRotation: String; > private var _doorNob: Object3D; > private var _doorLeg: Object3D; > > > /** > * @Constructor > */ > public function new( rectangle_: Rectangle, opening_: Open ) > { > > super(); > _hi = rectangle_.height; > _wide = rectangle_.width; > _doorNob = new Object3D(); > _doorLeg = new Object3D(); > > switch( opening_ ) > { > case left: > _orientationRotation = 'rotationY'; > _get_rotate = _get_rotation_Y; > _set_rotate = _set_rotation_Y; > _doorNob.x += _wide/2; > _doorLeg.x += _wide; > > case right: > _orientationRotation = 'rotationY'; > _get_rotate = _get_rotation_Y; > _set_rotate = _set_rotation_Y; > _doorNob.x -= _wide/2; > _doorLeg.x -= _wide; > > case top: > _orientationRotation = 'rotationX'; > _get_rotate = _get_rotation_X; > _set_rotate = _set_rotation_X; > _doorNob.y -= _hi/2; > _doorLeg.y -= _hi; > > case bottom: > _orientationRotation = 'rotationX'; > _get_rotate = _get_rotation_X; > _set_rotate = _set_rotation_X; > _doorNob.y += _hi/2; > _doorLeg.y += _hi; > > } > > _holder = new Object3D(); > _holder.addChild( _doorNob ); > _holder.addChild( _doorLeg ); > > addChild( _holder ); > > } > > > } > > > > // used for quick testing > package net.justinfront.views; > > import flash.display.BitmapData; > import away3dlite.primitives.Plane; > import away3dlite.core.base.Object3D; > import away3dlite.materials.MovieMaterial; > import away3dlite.materials.BitmapMaterial; > import flash.geom.Point; > import flash.display.DisplayObject; > import flash.display.MovieClip; > > import flash.geom.Rectangle; > > > class MC_3D extends Plane > { > > > public var mc: DisplayObject; > public var mcMaterial: BitmapMaterial; > public var hi: Float; > public var wide: Float; > > > /** > * @Constructor > */ > //(material:Material = null, width:Number = 100, height:Number = > 100, segmentsW:int = 1, segmentsH:int = 1, yUp:Boolean = true) > public function new( > segmentsW: Int = 0, > segmentsH: Int = 0, > movieAsset: DisplayObject = null, > transparent: Bool = false, > animated: Bool = false, > precise: Bool = false, > rect: Rectangle = null > ) > { > > var mat: BitmapMaterial = new BitmapMaterial( > copyToBitmapWithTransparency( cast( movieAsset, MovieClip ) )); > /*, > rect, > animated, > transparent > );*/ > mat.smooth = true; > > var wide_: Float = movieAsset.width;//*.5; > var hi_: Float = movieAsset.height;//*.5; > // mat.interactive = true; > mat.repeat = false; > > //(material:Material = null, width:Number = 100, height:Number = > 100, segmentsW:int = 1, segmentsH:int = 1, yUp:Boolean = true) > super( mat, wide_, hi_, segmentsW, segmentsH, false );///yUp?? > // ?yUp:Bool = true) > > > // put on instance for later ref > mcMaterial = mat; > mc = movieAsset; > hi = hi_; > wide = wide_; > > } > > /** > * used for copying a movie to a bitmapdata object > */ > public function copyToBitmapWithTransparency( mc: MovieClip ): > BitmapData > { > > mc.cacheAsBitmap = true; > > var wide: Int = Std.int( mc.width ); > var hi: Int = Std.int( mc.height ); > var point: Point = new Point( 0, 0); > var rect: Rectangle = new Rectangle( 0 , 0, wide, > hi); > var abitmap: BitmapData = new BitmapData( wide, hi, > true, 0x00000 ); > abitmap.draw( mc ); > abitmap.copyPixels( abitmap, rect, point, abitmap, point, false > ); > > return abitmap; > > > } > } > > > package net.justinfront.views; > import away3dlite.cameras.HoverCamera3D; > import away3dlite.containers.Scene3D; > import away3dlite.containers.View3D; > import away3dlite.core.base.Mesh; > import away3dlite.containers.ObjectContainer3D; > import away3dlite.core.base.SortType; > import away3dlite.core.render.BasicRenderer; > import away3dlite.core.render.Renderer; > import away3dlite.events.MouseEvent3D; > import away3dlite.materials.WireColorMaterial; > import away3dlite.materials.BitmapFileMaterial; > import away3dlite.primitives.Plane; > import flash.display.Bitmap; > import flash.display.Sprite; > import flash.display.MovieClip; > import flash.events.Event; > import flash.events.MouseEvent; > import flash.Lib; > import net.hires.debug.Stats; > import flash.display.StageQuality; > import away3dlite.materials.Material; > import flash.display.BitmapData; > import flash.display.GraphicsBitmapFill; > import flash.filters.ColorMatrixFilter; > import fl.motion.DynamicMatrix; > import fl.motion.ColorMatrix; > import fl.motion.AdjustColor; > import flash.geom.ColorTransform; > import flash.geom.Point; > import flash.filters.BlurFilter; > import away3dlite.events.MaterialEvent; > import net.justinfront.views.MC_3D; > import flash.display.DisplayObject; > import net.justinfront.utils.LoadedLib; > import flash.geom.Rectangle; > import net.justinfront.views.Door; > import flash.geom.Vector3D; > > class PopupScene extends Sprite > { > // JLM at justinfront dot net > > //engine variables > private var scene: Scene3D; > private var camera: HoverCamera3D; > private var renderer: Renderer; > private var view: View3D; > > private var _swfLayout: LoadedLib; > > //navigation variables > private var move: Bool; > private var lastPanAngle: Float; > private var lastTiltAngle: Float; > private var lastMouseX: Float; > private var lastMouseY: Float; > > private var _centre: ObjectContainer3D; > > > private var _mountains: MovieClip; > private var _waterfall: MovieClip; > > private var _mountains3D: MC_3D; > private var _waterfall3D: MC_3D; > > //public static function main(){ Lib.current.addChild( new PopupScene() > ); } > public function new( swfLayout_: LoadedLib ) > { > super(); > > _swfLayout = swfLayout_; > > move = false; > > //if (stage != null) init(); > //addEventListener( Event.ADDED_TO_STAGE, init ); > > } > > > public function init( ?e: Event ):Void > { > initEngine(); > initObjects(); > initListeners(); > onEnterFrame(null); > > } > > > private function initEngine():Void > { > > scene = new Scene3D(); > //scene.y = 400; > camera = new HoverCamera3D(); > camera.focus = 20; > camera.distance = 400; > > //camera.lookAt(new Vector3D(0, 0, 0), new Vector3D(0, 1, 0)); > > > //camera.minTiltAngle = -30; > //camera.maxTiltAngle = 40; > //camera.tiltAngle = 33; > camera.hover( true ); > > renderer = new BasicRenderer(); > view = new View3D(); > view.scene = scene; > view.camera = camera; > view.renderer = renderer; > addChild( view ); > var stats: Stats = new Stats(); > addChild( stats ); > stats.x = 800 - stats.width; > > //stats.alpha = 0.5; > } > > > private function initObjects():Void > { > > _centre = new ObjectContainer3D(); > > //_centre.z -= 720 + 1100; > > scene.addChild( _centre ); > > var tempX: Float; > var tempY: Float; > > _mountains = _swfLayout.createMovieByInstance( '_mountains' ); > //addChild( _mountains ); > tempX = _mountains.x; > tempY = _mountains.y; > _mountains.x = 0; > _mountains.y = 0; > //var mountains3D: MC_3D = createMC_3D( _mountains, false ); > //_mountains3D = new Door( new Rectangle( 0, 0, _mountains.width, > _mountains.height ), Open.bottom ); > //_mountains3D.addNob( mountains3D ); > _mountains3D = createMC_3D( _mountains, false ); > _mountains3D.x = tempX; > _mountains3D.y = tempY; > _mountains3D.z = -100; > scene.addChild( _mountains3D ); > > _waterfall = _swfLayout.createMovieByInstance( '_waterfall' ); > //addChild( _waterfall ); > tempX = _waterfall.x; > tempY = _waterfall.y; > _waterfall.x = 0; > _waterfall.y = 0; > //var waterfall3D: MC_3D = createMC_3D( _waterfall, false ); > //_waterfall3D = new Door( new Rectangle( 0, 0, _mountains.width, > _mountains.height ), Open.bottom ); > //_waterfall3D.addNob( waterfall3D ); > _waterfall3D = createMC_3D( _waterfall, false ); > _waterfall3D.x = tempX; > _waterfall3D.y = tempY; > _waterfall3D.z = -100; > //_waterfall3D.rotate = 90; > //_waterfall3D.rotationX = 90; > scene.addChild( _waterfall3D ); > > > } > > > private function createMC_3D( mc: DisplayObject, animated: Bool ):MC_3D > { > // 3, 3 relates to grid of elements > return new MC_3D( 3, 3, mc, /*transparent:*/ true, /*animated:*/ > animated, /*precise:*/ true ); > > } > > > > /** > * Initialise the listeners > */ > private function initListeners():Void > { > > scene.addEventListener( MouseEvent3D.MOUSE_UP, onSceneMouseUp ); > > addEventListener( Event.ENTER_FRAME, onEnterFrame ); > stage.addEventListener( MouseEvent.MOUSE_DOWN, onMouseDown ); > stage.addEventListener( MouseEvent.MOUSE_UP, onMouseUp ); > stage.addEventListener( Event.RESIZE, onResize ); > > onResize(); > > } > > /** > * Mouse up listener for the 3d scene > */ > private function onSceneMouseUp( e: MouseEvent3D ):Void > { > /* > if (Std.is(e.object, Mesh)) { > var mesh:Mesh = Lib.as(e.object, Mesh); > mesh.material = new WireColorMaterial(); > } > */ > } > > /** > * Navigation and render loop > */ > private function onEnterFrame( ?event: Event=null ):Void > { > > if( move ) > { > > camera.panAngle = 0.1*( stage.mouseX - lastMouseX ) + > lastPanAngle;//0.3 > camera.tiltAngle = 0.1*( stage.mouseY - lastMouseY ) + > lastTiltAngle; > > } > > camera.hover(); > > > view.render(); > > } > > > /** > * Mouse down listener for navigation > */ > private function onMouseDown( ?event: MouseEvent=null ):Void > { > > lastPanAngle = camera.panAngle; > lastTiltAngle = camera.tiltAngle; > lastMouseX = stage.mouseX; > lastMouseY = stage.mouseY; > move = true; > > stage.addEventListener( Event.MOUSE_LEAVE, onStageMouseLeave ); > > } > > > /** > * Mouse up listener for navigation > */ > private function onMouseUp( event: MouseEvent ):Void > { > > move = false; > stage.removeEventListener(Event.MOUSE_LEAVE, onStageMouseLeave); > > } > > > /** > * Mouse stage leave listener for navigation > */ > private function onStageMouseLeave( event: Event ):Void > { > > move = false; > stage.removeEventListener( Event.MOUSE_LEAVE, onStageMouseLeave ); > > } > > > /** > * Stage listener for resize events > */ > private function onResize( ?event: Event ):Void > { > > view.x = stage.stageWidth / 2; > view.y = stage.stageHeight / 2; > > } > > } > -- katopz http://www.sleepydesign.com
