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...