예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }