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

Reply via email to