public void MouseMove(int x, int y) { if (MouseDownFlag) { Debug.WriteLine(" =================>MouseMove:", listenerName); if (!cameraState.IsSameState(this.Camera)) { SetCamera(this.Camera.Position, this.Camera.Target, this.Camera.UpVector); Debug.WriteLine(string.Format( " update camera state: {0}, {1}, {2}", this.cameraState.position, this.cameraState.target, this.cameraState.up), listenerName); } this._endPosition = GetArcBallPosition(x, y); Debug.WriteLine(string.Format( " End position: {0}", this._endPosition), listenerName); var cosAngle = _startPosition.dot(_endPosition) / (_startPosition.Magnitude() * _endPosition.Magnitude()); if (cosAngle > 1) { cosAngle = 1; } else if (cosAngle < -1) { cosAngle = -1; } Debug.Write(string.Format(" cos angle: {0}", cosAngle), listenerName); var angle = mouseSensitivity * (float)(Math.Acos(cosAngle) / Math.PI * 180); Debug.WriteLine(string.Format( ", angle: {0}", angle), listenerName); _normalVector = _startPosition.cross(_endPosition).normalize(); if ((_normalVector.x == 0 && _normalVector.y == 0 && _normalVector.z == 0) || float.IsNaN(_normalVector.x) || float.IsNaN(_normalVector.y) || float.IsNaN(_normalVector.z)) { Debug.WriteLine(" no movement recorded.", listenerName); } else { Debug.WriteLine(string.Format( " normal vector: {0}", _normalVector), listenerName); _startPosition = _endPosition; mat4 newRotation = glm.rotate(angle, _normalVector); Debug.WriteLine(string.Format( " new rotation matrix: {0}", newRotation), listenerName); this.totalRotation = newRotation * totalRotation; Debug.WriteLine(string.Format( " total rotation matrix: {0}", totalRotation), listenerName); } Debug.WriteLine(" -------------------MouseMove end.", listenerName); } }
/// <summary> /// /// </summary> /// <returns></returns> public override string ToString() { return(string.Format("back:{0}|{3:0.00},up:{1}|{4:0.00},right:{2}|{5:0.00}", back, up, right, back.Magnitude(), up.Magnitude(), right.Magnitude())); //return base.ToString(); }