2

我正在从固定点渲染网格模型的视图,即我实际上将相机放置在世界空间中的已知坐标处。例如,请参见下图: 在此处输入图像描述

我会将相机放置在我知道坐标的每个红色顶点处。我怎样才能算出相机的变换矩阵。例如,如果我希望将其移动到的位置是,(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|

任何帮助表示赞赏

4

1 回答 1

2

通常,您有一个与其状态相关联的相机方向。该方向通常被捕获为视图平面法线 (VPN) 和向上视图矢量 (VUV)。有时也可能有用(但不是必需的)视图右向量 (VRV) 或视图左向量 (VLV),它们只是其他两个向量的叉积。

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

为了计算这个,旋转向量是R = V 0 × V 1(可能有错误的顺序......但这应该给你的想法),角度由 θ = cos -1 [( V 0 ∙<B >V 1 ) / || V 0 || || V 1 ||]。您可以使用四元数角轴旋转矩阵来旋转相机的位置和方向。

或者,如果您使用的是 OpenGL,则有一个功能已经为您完成了这项工作。它被称为gluLookat。我不知道它是否已被弃用以支持其他东西,但在过去,它非常有用。

于 2013-08-02T15:37:18.307 回答