Math 如何计算变换矩阵

Math 如何计算变换矩阵,math,graphics,rotation,Math,Graphics,Rotation,我从固定点渲染网格模型的视图,也就是说,我实际上是将摄影机放置在世界空间中的已知坐标处。例如,请参见下图: 我将把相机放置在我知道坐标的每个红色顶点上。如何计算相机的变换矩阵。例如,如果我希望将其移动到的位置是(x,y,z),那么我知道翻译显然是[x,y,z]。然而,它也必须面对(0,0,0),这意味着它必须旋转,我只是不知道如何计算这个旋转 我基本上想要恢复相机的4x4变换矩阵,它看起来像 |r11 r12 r13 0| |r21 r22 r23 0| |r31 r32 r33 0| | x

我从固定点渲染网格模型的视图,也就是说,我实际上是将摄影机放置在世界空间中的已知坐标处。例如,请参见下图:

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

感谢您提供的任何帮助

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

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

为了计算这个,旋转向量是R=V0×V1(可能顺序错误……但这应该给你一个想法),角度由θ=cos-1[(V0)给出∙V1)/| | V0 | | | | V1 | |]。可以使用或旋转摄影机的位置和方向


或者,如果您使用的是OpenGL,那么有一个函数已经为您完成了这项工作。它叫。我不知道是否有人反对使用它来支持其他的东西,但在那一天,它非常有用。

您是否尝试过或
D3DUtil_SetViewMatrix
?我在vtkCamera类(我使用的是vtk btw)上找到了一个方法,它是
vtkCamera::GetViewTransformMatrix
,它返回4x4矩阵。这就是我要找的吗?另外,为什么它是4x4?这不是3x3旋转矩阵?根据vtkCamera文档,您可能应该使用GetViewUp/SetViewUp和GetViewPlaneNormal/SetViewPlaneNormal。这将允许您确定相机的当前方向,并根据需要进行更改。视图变换矩阵的操作将有点麻烦。当您想要模拟三维仿射变换的行为时,将使用4x4矩阵。平移不是线性变换,因为所有线性变换都必须将原点映射到自身。为了解决这个问题,将另一个维度添加到三维向量中,并在该位置使用1。这允许使用矩阵来执行转换。在旋转的情况下,这是一个纯线性变换,因此不需要额外的维数。我可以建议吗