Hi,

Might be a set of noob problems, but here goes...

I'm excited to find the Jeep3DSTest tech demo,

http://www.infiniteturtles.co.uk/projects/away3d/demos/Jeep3DSTest/Jeep3DSTest.html

since I'm starting on a project that requires loading 3DS models and
building variations on rotation interaction. I've run into the
following problems, however, that have me scratching my head...

Version 1.9.4
It appears from the original import statements in Jeep3DSTest source
that the demo was built for the 1.9.4 release at the latest. The 2.x
releases have a different package hierarchy. If I run the demo using
1.9.4, the following problems arise:
 - after a medium to large number of rotations (say from 25 to 100),
the distance between the camera and the model either increases to
infinity, or decreases to 0

Version 2.2 (trunk)
After some modification to the import statements, I can run the same
Jeep3DSTest demo using a 2.x library. However, then the following
problems arise:
- the maxX (and minX), maxY (and minY), and maxZ (and minZ) functions
return different values than under the 1.9.4 library. The numbers
appear suspect to me, as they are equidistant from zero in each axis,
*and* they are all the same value implying the model is a cube-- which
on inspection and in comparison to 1.9.4 values it is not.
- the pivotPoint function returns a value of 0,0,0, which after the
model loads seems incorrect as well, as the pivotPoint (for rotation,
anyway) is actually under the rear axle of the model
- the initial reorienting attempt using rotationX and rotationY
functions, which worked in 1.9.4, do not appear to have an effect in
the 2.x library

To see these issues in action, please refer to the two versions of
Jeep3DSTest below, with modifications to "trace" the values in
question (and to avoid compiler warnings about "onMouseDown" handler
naming...)

Any assistance or guidance is much appreciated.

slhenty

***************************
[Jeep3DSTest_A3D_1.9.4, referenced as the document class in an
800x600 .fla stage file]
package {
        import away3d.core.material.*;
        import away3d.core.math.Number3D;
        import away3d.core.render.*;
        import away3d.core.scene.*;
        import away3d.loaders.*;
        import away3d.objects.*;

        //import com.adobe.viewsource.ViewSource;

        import flash.display.*;
        import flash.events.*;

        [SWF(backgroundColor="#222266", frameRate="30")];

        public class Jeep3DSTest_A3D_1_9_4 extends Sprite {
                //[Embed(source="images/signature.swf")]
                //public static var SignatureSwf:Class

                //public var Signature:MovieClip;
                public var view:View3D;
                public var jeep:Object3DLoader;
                public var pan:Boolean;

                /**
                  * Constructor
                  */
                public function Jeep3DSTest_A3D_1_9_4() {
                        //setup stage
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;

                        //include right-click viewsource
                        //ViewSource.addMenuItem(this, "srcview/index.html");

                        //setup view
                        view = new View3D();
                        addChild(view);

                        jeep = Max3DS.load("images/jeep1.3ds", 
{texturePath:"images/",
name:"jeep", loadersize:100});

                        jeep.rotationX = -68;
                        jeep.rotationZ = 180;
                        jeep.addOnSuccess(initJeep);
                        view.scene.addChild(jeep);

                        //setup signature
                        //Signature = MovieClip(new SignatureSwf());
                        //addChild(Signature);

                        //setup listeners
                        //stage.addEventListener(Event.ENTER_FRAME, 
onEnterFrame);
                        stage.addEventListener(Event.ENTER_FRAME, 
handleEnterFrame);
                        //stage.addEventListener(Event.RESIZE, onResize);
                        stage.addEventListener(Event.RESIZE, handleResize);
                        //stage.addEventListener(MouseEvent.MOUSE_DOWN, 
onMouseDown);
                        stage.addEventListener(MouseEvent.MOUSE_DOWN, 
handleMouseDown);
                        //stage.addEventListener(MouseEvent.MOUSE_UP, 
onMouseUp);
                        stage.addEventListener(MouseEvent.MOUSE_UP, 
handleMouseUp);
                        handleResize(null);
                }
                /**
                         * DEBUG: notify of load success
                 */
                public function loadSuccess(event:Event):void {
                        trace("load SUCCESS");
                        initJeep(event);
                }
                /**
                         * DEBUG: notify of load error
                 */
                public function loadError(event:Event):void {
                        trace("load ERROR");
                }
                /**
                         * format jeep after loading
                         */
                public function initJeep(event:Event):void {
                        //scale
                        trace("Before scaling...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        jeep.handle.scale(10);
                        trace("After scaling...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        //adjust internal coords
                        (jeep.handle  as  
ObjectContainer3D).movePivot((jeep.handle.maxX +
jeep.handle.minX)/2, (jeep.handle.maxY + jeep.handle.minY)/2,
(jeep.handle.maxZ + jeep.handle.minZ)/2);
                        trace("After movePivot...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        //recenter
                        jeep.handle.x = jeep.handle.y = jeep.handle.z = 0;
                        trace("After recenter...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                }
                public var lastMouseX:Number = 0;
                public var lastMouseY:Number = 0;
                public var zeroPosition:Number3D = new Number3D(0, 0, 0);

                /**
                         * enterframe handler
                         */

                //public function onEnterFrame(event:Event):void
                public function handleEnterFrame(event:Event):void {
                        view.camera.moveTo(zeroPosition);

                        if (pan) {
                                view.camera.pan(-0.3*(lastMouseX - 
stage.mouseX));
                                view.camera.tilt(-0.3*(lastMouseY - 
stage.mouseY));
                        }
                        lastMouseX = stage.mouseX;
                        lastMouseY = stage.mouseY;

                        view.camera.moveBackward(400);
                        if (pan) {
                                trace("distance to center: " + 
view.camera.distanceTo(jeep));
                        }

                        view.render();
                }
                /**
                         * resize handler
                         */
                //private function onResize(event:Event):void
                private function handleResize(event:Event):void {
                        view.x = stage.stageWidth/2;
                        view.y = stage.stageHeight/2;
                        //Signature.y = stage.stageHeight - Signature.height;
                }
                /**
                         * mousedown handler
                         */
                //private function onMouseDown(event:MouseEvent):void
                private function handleMouseDown(event:MouseEvent):void {
                        //initialise mouse movement
                        lastMouseX = stage.mouseX;
                        lastMouseY = stage.mouseY;
                        pan = true;
                        //stage.addEventListener(Event.MOUSE_LEAVE, 
onStageMouseLeave);
                        stage.addEventListener(Event.MOUSE_LEAVE, 
handleStageMouseLeave);
                }
                /**
                         * mouseup handler
                         */
                //private function onMouseUp(event:MouseEvent):void
                private function handleMouseUp(event:MouseEvent):void {
                        pan = false;
                        //stage.removeEventListener(Event.MOUSE_LEAVE,
onStageMouseLeave);
                        stage.removeEventListener(Event.MOUSE_LEAVE,
handleStageMouseLeave);
                }
                /**
                         * mouseleave handler (to prevent sticking mouse 
buttons)
                         */
                //private function onStageMouseLeave(event:Event):void
                private function handleStageMouseLeave(event:Event):void {
                        pan = false;
                        //stage.removeEventListener(Event.MOUSE_LEAVE,
onStageMouseLeave);
                        stage.removeEventListener(Event.MOUSE_LEAVE,
handleStageMouseLeave);
                }
        }
}



***************************
[Jeep3DSTest_A3D_2.2, referenced as the document class in an
800x600 .fla stage file]
package {
    //import away3d.core.material.*;
    import away3d.materials.*;
        import away3d.core.math.Number3D;
    import away3d.core.render.*;
    //import away3d.core.scene.*;
    import away3d.containers.*;
        import away3d.loaders.*;
    //import away3d.objects.*;

    //import com.adobe.viewsource.ViewSource;

    import flash.display.*;
    import flash.events.*;

    [SWF(backgroundColor="#222266", frameRate="30")]

    public class Jeep3DSTest_A3D_2_2 extends Sprite
    {
        //[Embed(source="images/signature.swf")]
        //public static var SignatureSwf:Class

        //public var Signature:MovieClip;
        public var view:View3D;
        public var jeep:Object3DLoader;
        public var pan:Boolean;

        /**
         * Constructor
         */
        public function Jeep3DSTest_A3D_2_2()
        {
            //setup stage
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            //include right-click viewsource
            //ViewSource.addMenuItem(this, "srcview/index.html");

            //setup view
            view = new View3D();
            addChild(view);

            jeep = Max3DS.load("images/jeep1.3ds",
{texturePath:"images/", name:"jeep", loadersize:100});
//                      jeep.addOnSuccess(loadSuccess);
//                      jeep.addOnError(loadError);

            jeep.rotationX = -68;
            jeep.rotationZ = 180;
            jeep.addOnSuccess(initJeep);
            view.scene.addChild(jeep);

            //setup signature
            //Signature = MovieClip(new SignatureSwf());
            //addChild(Signature);

            //setup listeners
            //stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(Event.ENTER_FRAME,
handleEnterFrame);
                        //stage.addEventListener(Event.RESIZE, onResize);
            stage.addEventListener(Event.RESIZE, handleResize);
                        //stage.addEventListener(MouseEvent.MOUSE_DOWN, 
onMouseDown);
            stage.addEventListener(MouseEvent.MOUSE_DOWN,
handleMouseDown);
            //stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            stage.addEventListener(MouseEvent.MOUSE_UP,
handleMouseUp);
            handleResize(null);
        }

        /**
         * DEBUG: notify of load success
                 */
        public function loadSuccess(event:Event):void
        {
                        trace("load SUCCESS");
                        initJeep(event);
                }
        /**
         * DEBUG: notify of load error
                 */
        public function loadError(event:Event):void
        {
                        trace("load ERROR");
                }

        /**
         * format jeep after loading
         */
        public function initJeep(event:Event):void
        {
            //scale
                        trace("Before scaling...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        trace("pivotPoint x, y, z: " + jeep.handle.pivotPoint.x 
+ ", " +
jeep.pivotPoint.y + ", " + jeep.pivotPoint.z);
            jeep.handle.scale(10);
                        trace("After scaling...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        trace("pivotPoint x, y, z: " + jeep.handle.pivotPoint.x 
+ ", " +
jeep.pivotPoint.y + ", " + jeep.pivotPoint.z);
            //adjust internal coords
            (jeep.handle as ObjectContainer3D).movePivot((jeep.maxX +
jeep.minX)/2, (jeep.maxY + jeep.minY)/2, (jeep.maxZ + jeep.minZ)/2);
                        trace("After movePivot...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        trace("pivotPoint x, y, z: " + jeep.handle.pivotPoint.x 
+ ", " +
jeep.pivotPoint.y + ", " + jeep.pivotPoint.z);
            //recenter
            jeep.handle.x = jeep.handle.y = jeep.handle.z = 0;
                        trace("After recenter...");
                        trace("Max x, y, z: " + jeep.handle.maxX + ", " + 
jeep.handle.maxY
+ ", " + jeep.handle.maxZ);
                        trace("Min x, y, z: " + jeep.handle.minX + ", " + 
jeep.handle.minY
+ ", " + jeep.handle.minZ);
                        trace("pivotPoint x, y, z: " + jeep.handle.pivotPoint.x 
+ ", " +
jeep.pivotPoint.y + ", " + jeep.pivotPoint.z);
        }

        public var lastMouseX:Number = 0;
        public var lastMouseY:Number = 0;
        public var zeroPosition:Number3D = new Number3D(0, 0, 0);

        /**
         * enterframe handler
         */

        //public function onEnterFrame(event:Event):void
                public function handleEnterFrame(event:Event):void
        {
            view.camera.moveTo(zeroPosition.x, zeroPosition.y,
zeroPosition.z);

            if (pan) {
                view.camera.pan(-0.3*(lastMouseX - stage.mouseX));
                view.camera.tilt(-0.3*(lastMouseY - stage.mouseY));
            }

            lastMouseX = stage.mouseX;
            lastMouseY = stage.mouseY;

            view.camera.moveBackward(400);
                        if (pan) {
                                trace("distance to center: " + 
view.camera.distanceTo(jeep));
                        }

            view.render();
        }

        /**
         * resize handler
         */
        //private function onResize(event:Event):void
        private function handleResize(event:Event):void
        {
            view.x = stage.stageWidth/2;
            view.y = stage.stageHeight/2;
            //Signature.y = stage.stageHeight - Signature.height;
        }

        /**
         * mousedown handler
         */
        //private function onMouseDown(event:MouseEvent):void
        private function handleMouseDown(event:MouseEvent):void
        {
            //initialise mouse movement
            lastMouseX = stage.mouseX;
            lastMouseY = stage.mouseY;
            pan = true;
            //stage.addEventListener(Event.MOUSE_LEAVE,
onStageMouseLeave);
                stage.addEventListener(Event.MOUSE_LEAVE,
handleStageMouseLeave);
        }

        /**
         * mouseup handler
         */
        //private function onMouseUp(event:MouseEvent):void
        private function handleMouseUp(event:MouseEvent):void
        {
            pan = false;
            //stage.removeEventListener(Event.MOUSE_LEAVE,
onStageMouseLeave);
                        stage.removeEventListener(Event.MOUSE_LEAVE,
handleStageMouseLeave);
        }

        /**
         * mouseleave handler (to prevent sticking mouse buttons)
         */
        //private function onStageMouseLeave(event:Event):void
        private function handleStageMouseLeave(event:Event):void
        {
            pan = false;
            //stage.removeEventListener(Event.MOUSE_LEAVE,
onStageMouseLeave);
                        stage.removeEventListener(Event.MOUSE_LEAVE,
handleStageMouseLeave);
        }
    }
}

Reply via email to