如何计算变换矩阵

时间:2013-08-02 14:52:35

标签: math graphics rotation

我正在从固定点渲染网格模型的视图,即我实际上将相机放在世界空间中的已知坐标上。例如,请参见下图: enter image description here

我会将相机放在我知道坐标的每个红色顶点上。我怎样才能计算出相机的变换矩阵。例如,如果我希望将其移动到(x,y,z)的位置,那么我知道翻译显然是[x,y,z]。但是,它还必须面对(0,0,0),这意味着它必须旋转,我只是不知道如何计算这种旋转。

我基本上想要恢复相机的4x4变换矩阵,它看起来像

|r11 r12 r13 0|
|r21 r22 r23 0|
|r31 r32 r33 0|
| x   y   z  1|

感谢任何帮助

1 个答案:

答案 0 :(得分:2)

通常,您的相机方向与其状态相关联。此方向通常被捕获为视图平面法线(VPN)和视图向上矢量(VUV)。它有时也可能是有用的(但不是必需的)也有一个View Right Vector(VRV)或View Left Vector(VLV),它只是另外两个的交叉产品。

为了将相机从一个位置 V 0 =(x,y,z)旋转到另一个 V 1 =(x',y',z')在保持透视图(0,0,0)的同时,您只需要将变换的旋转部分应用于各种视图矢量。由于您只是在球体表面上旋转相机位置,因此应该保留相机指向的点。

为了计算这一点,旋转矢量为 R = V 0 × V 1 < / sub>(可能有错误的顺序...但这应该给你一个想法),角度由θ= cos -1 [( V 0 V 1 )/ || V 0 || || V <子> 1 ||]。您可以使用QuaternionsAngle-Axis Rotation Matrix来旋转相机的位置和方向。

或者,如果您正在使用OpenGL,则有一个功能可以为您执行此操作。它被称为gluLookat。我不知道它是否已被弃用而不赞成其他东西,但在当天,它非常有用。