There was some old bug that would pop up from time to time in different versions, try to trace you view.camera.rotationZ. If it's 180, or -180 that may be the culprit!
-Pete On Thu, Mar 18, 2010 at 4:49 PM, Justin Lawerance Mills <[email protected] > wrote: > katopz > > Thanks for the links I have probably looked at them already. If you need > help getting started on haXe let me know I can even send you a basic project > that loads flash swf with assets and some xml so that you don't have to mess > with swfmill and have some code to experiment with and set up for a site. > > But my main problem was if you try to put a plane into one of the example > files - "Basic_InteractiveObjects.hx" with a picture in it you will notice > the image is always upside down! > > I have resorted to rotating the whole scene by 180 degrees ( or rotating > each plane in previous attempt ), I am not sure I would have found this in > any tutorial, and I am using latest haXe version from the svn maybe I need > to add a handle to the camera but seem as though its default should be > different. > > I found the bug (pan tilt )mentioned earlier today was also present in the > haXe build, I have modified my local version to match the away3d change > mentioned on the mailing list, but still have to use the scene rotation 180. > > Transparency on MovieMaterial does not seem to work for me ( ? ) so I am > using BitmapMaterial, but I really am not keen on manually modifying the > bitmapDataFill every frame so would be nice to get to the bottom of this... > but as I have found in other engines - if you know how to hack with the > basic 3D classes you don't need the fancy ones. > > I do have a haXe specific issue remaining in regard to my Door class which > is nearly right now ( swapped Object3D for ContainerObject3D and mesh... > although not ideal that Plane does not derive from ContainerObject3D ) and > Door is very useful for connecting planes together for popup or limbs, but I > will post that on the haXe list as I have a problem defining Dynamic setter > getter properties in a way I can tween. > > Cheers > > ;j > > > > > > > On 18 Mar 2010, at 08:27, katopz wrote: > > 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 > > > To unsubscribe from this group, send email to away3d-dev+ > unsubscribegooglegroups.com or reply to this email with the words "REMOVE > ME" as the subject. > -- ___________________ Actionscript 3.0 Flash 3D Graphics Engine HTTP://AWAY3D.COM To unsubscribe from this group, send email to away3d-dev+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.
