【问题标题】:How to get the camera rotation matrix out of the model view matrix如何从模型视图矩阵中获取相机旋转矩阵
【发布时间】:2013-06-26 16:34:08
【问题描述】:

如果我有模型视图旋转矩阵(例如,我也可以在 glMultMatrixf(rtMatrix, 0) 中使用它),那么我如何计算出围绕虚拟相机的旋转。我认为转换位置 t 只是 camPos=-1*t 但是当我围绕世界中心旋转时如何获得围绕相机的旋转(这是模型视图矩阵对吗?)

【问题讨论】:

    标签: opengl opengl-es matrix rotation


    【解决方案1】:

    取模型视图矩阵左上角3×3子矩阵的逆:

                        -1
        / M00 M10 M20 \
    O = | M01 M11 M21 |
        \ M02 M12 M22 /
    

    完成。

    根据 InkBlend 在 cmets 中的请求更新代码示例

    /* datenwolf's linmath.h, available at
     * https://github.com/datenwolf/linmath.h
     */
    #include <linmath.h>
    
    void view_orientation(mat4x4 O, mat4x4 MV)
    {
        mat4x4_dup(O, MV);
        O[0][3] = O[1][3] = O[2][3] =
        O[3][0] = O[3][1] = O[3][2] = 0.;
        O[3][3] = 1;
        mat4x4_invert(O, O);
    }
    

    【讨论】:

    • @InkBlend:我添加了一个代码示例。但我不明白,这如何让事情变得更清楚。
    • 我只想尽可能在​​答案中包含代码 sn-ps。它有助于教授像我这样经验不足的程序员,因为他们说阅读代码可以帮助您编写(更好的)代码。
    • @InkBlend:阅读代码只有在更大的上下文中才有意义。像上面这样的代码 sn-p 很容易生成。但是当你编写更大的项目时,事情就变得不那么明显了。在→this source code 我写的教程中,有一小部分完全符合这个问题的要求。然而,实际的实现看起来与我在答案中写的非常不同(部分原因是我没有使用 linmath.h)。 你能找到吗?
    • @InkBlend:如果您查看 frustum.c 并只关注 math,应该很明显。但如果你专注于代码,你可能会错过它。
    • 啊。当我听说阅读代码很好时,我不知道它们是指大部分或全部代码,而不仅仅是一个sn-p。感谢您清除它!
    猜你喜欢
    • 2022-12-09
    • 2017-10-14
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多