for more info:

what I want to achieve is a simple pan/tilt of the camera,
but after the tween (see above),
the simple method here give me a bug:
the first time I move the panObject(the target) steps to another place
than it's previous place (along the new forward vector of the camera
at determined distance when i click to initialize the pan/tilt
movement)...after that it works fairly well, but I would like to avoid
this "step" :

here is the method, a basic one:
private function initNavigationMode(e:MouseEvent):void
                {
                        trace("init navigationMOde");
                        navigationMode = true;
                        moveMode = false;
                        paintMode = false;
                        //createMode = false;
                        //modelerMode = false;
                        quitMoveMode();
                        if (tools == null)
                        {
                                tools = new Sprite();
                                addChild(tools);
                                navigator = new Navigator();
                                navigator.x = SW/2;
                                navigator.y = SH/2;
                                tools.addChild(navigator);
                                navigator.useHandCursor = true;
                        }
                        else {
                                addChild(tools);
                                tools.addChild(navigator);
                        }
                        
navigator.addEventListener(MouseEvent.MOUSE_DOWN,startMove);
                }

                private function startMove(e:MouseEvent):void
                {
                        doNav=true;
                        panTarget.transform = camera.transform;
                        panTarget.moveForward(100);
                        panTarget.lookAt(camera.position);
                        lastPanAngle = panangle;
                        lastTiltAngle = tiltangle;
                        lastMouseX = navigator.mouseX;
                        lastMouseY = navigator.mouseY;
                        trace(panangle,tiltangle);
                        
e.target.removeEventListener(MouseEvent.MOUSE_DOWN,startMove);
                        e.target.addEventListener(MouseEvent.MOUSE_MOVE,doMove);
                        e.target.addEventListener(MouseEvent.MOUSE_UP,stopMove);
                        
e.target.addEventListener(MouseEvent.MOUSE_OUT,stopMove);
                }
                private function stopMove(e:MouseEvent):void
                {
                        doNav=false;
                        trace(panangle,tiltangle);
                        
e.target.removeEventListener(MouseEvent.MOUSE_OUT,stopMove);
                        
e.target.removeEventListener(MouseEvent.MOUSE_MOVE,doMove);
                        
e.target.addEventListener(MouseEvent.MOUSE_DOWN,startMove);
                }
                private function doMove(e:MouseEvent):void
                {
                        var rotationMatrix:Matrix3D = new Matrix3D();
                        if(upView == true){
                                var currentMousePoint:Point = new 
Point(navigator.mouseX,
navigator.mouseY);
                        var difference:Point = currentMousePoint.subtract
(previousMousePoint);
                        var rotationAxis:Number3D = new Number3D()
                        var distance:Number = Point.distance(currentMousePoint,
previousMousePoint);
                        var distanceX:Number = navigator.mouseX-navigator.x;
                        var distanceY:Number = navigator.mouseY-navigator.y;

                                var rotationAxisY:Number3D = new Number3D();
                                var rotationAxisX:Number3D = new Number3D();
                                rotationAxisY = Number3D.UP;
                                rotationAxisX = Number3D.FORWARD;
                                rotationMatrix.rotationMatrix
(rotationAxisY.x,rotationAxisY.y,rotationAxisY.z,distance/100);
                                camera.transform.multiply4x4(rotationMatrix, 
camera.transform);
                                previousMousePoint = currentMousePoint;

                        } else
                        {
/////here is the thing
                        panangle = 0.5*(navigator.mouseX - lastMouseX) + 
lastPanAngle;
                    tiltangle = -0.5*(navigator.mouseY - lastMouseY) +
lastTiltAngle;
                        panTarget.x = 100 * Math.sin(panangle * toRADIANS) * 
Math.cos
(tiltangle * toRADIANS) + camera.x;
            panTarget.z = 100 * Math.cos(panangle * toRADIANS) *
Math.cos(tiltangle * toRADIANS) + camera.z;
            panTarget.y = 100 * Math.sin(tiltangle * toRADIANS) +
camera.y;
            camera.lookAt(panTarget.position);

                        }

I thought that something wasn't updated but it comes from somewhere
else...

note:
I also tried with a rotationMatrix method (no target), works well but
havin a step too, that mean something in the camera rotation hasn't
been updated...

I know this is long question but thanks...

Reply via email to