在 OpenGL 中查找旋转矩阵

Find rotation matrix in OpenGL

对此持保留态度,我对线性代数几乎一无所知。也就是说,我的问题在于我已经多次乘以当前矩阵的旋转矩阵。本质上,我试图在转换之前获得原始矩阵(正确的术语?)。所以理论上,我应该能够“撤消”旋转矩阵。我听说过转置应用了旋转矩阵的矩阵,但是我什至不知道如何获得它。我对如何执行此操作进行了理论化的每种方法最终都导致必须知道在应用旋转矩阵之前的原始矩阵是什么(或通过某种方式找出)。从数学上讲,有没有办法在 OpenGL and/or 中做到这一点?

提前致谢。最好的问候。

在与迈克谈了更多之后,我确定他有潜在的问题,在尝试解决这个问题之前首先需要解决这些问题。看起来他正在使用已弃用的 OpenGL (glPush/Pop),并且无法访问相关矩阵。我已经指导他学习现代opengl,以后再回来讨论这个话题。

但是,我发现您确实可以从 RTS 变换矩阵中提取旋转。在他使用的 OpenTK 中,这是通过使用四元数的 ExtractRotation() of a Matrix4, which gives you a quarternion. You then use the ToEulerAngles() 函数来获得表示以弧度表示旋转的 Vector3 来完成的。最后一步是将这些弧度转换为度数,使用如下所示:

        /// <summary>
        /// Converts radians to degrees.
        /// </summary>
        /// <param name="radians">The angle in radians.</param>
        public static float ToDegrees(float radians)
        {
            return radians * 57.29578f;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="radians"></param>
        /// <returns></returns>
        public static Vector3 ToDegrees(Vector3 radians)
        {
            return new Vector3(ToDegrees(radians.X),ToDegrees(radians.Y), ToDegrees(radians.Z));
        }

这将使您旋转 xy 和 z 分量。最后一次应该注意的是,这仅适用于 RTS 转换。作为最终意见,none 应该在性能敏感代码中使用;相反,我建议将旋转存储在某个地方,以便您可以快速引用它而不是尝试提取它,并且如果需要,在它下面的层上同步和构建转换矩阵。