public void SetOrigin(Vector3 origin, Vector3 rotation) { Position = Origin = origin; Rotation = rotation; OriginRotation = rotation; Orientation = Quaternion.Identity; //xAngle = 0.0; camera_pitch = OriginRotation.Z; // * MathHelpers.PiOver180; camera_yaw = OriginRotation.X; // * MathHelpers.PiOver180; Orientation = QuaternionLib.QuaternionFromEulerAnglesRad(0, -camera_yaw, -camera_pitch); //Orientation = QuaternionExtensions.EulerToQuat(0, camera_yaw, -camera_pitch); }
public void ApplyRotation() { Vector3 direction = (Look - Position); direction.Normalize(); //MakeOrthogonal(); Vector3 lookat = QuaternionLib.Rotate(Orientation, Vector3.UnitZ); Vector3 forward = new Vector3(lookat.X, lookat.Y, 0).Normalized(); Vector3 up = Vector3.UnitY; Vector3 left = up.Cross(forward); Vector3 roll_axis = forward + Up; Orientation = QuaternionLib.QuaternionFromEulerAnglesRad(0, -camera_yaw, -camera_pitch); if (inverted) { Orientation *= QuaternionLib.QuaternionFromEulerAnglesRad(0, 0, -MathHelpers.PI); } }