如何解释VtkCamera视图TransformMatrix

How to interpret the VtkCamera viewTransformMatrix

本文关键字:VtkCamera 视图 TransformMatrix 解释 何解释      更新时间:2023-10-16

我在原点有一个物体,正在将相机移动到(0650650)并将焦点设置到原点,即:

vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New();
renderer->SetActiveCamera(cam);
cam->SetFocalPoint(0., 0., 0.);
cam->SetPosition(0., 650, 650);
cam->SetViewAngle(view_angle_);
cam->SetViewUp(0., 1., 0.);

然而,当我通过获得相机的视图变换矩阵时

vtkSmartPointer<vtkMatrix4x4> transform_view = cam->GetViewTransformMatrix();

然后打印出来,我得到以下信息:

| 1 |    0    |    0    |     0    | 
| 0 | cos(45) | -sin(45)|     0    | 
| 0 | sin(45) | cos(45) | -919.239 | 
| 0 |    0    |    0    |     1    | 

其中旋转部分看起来是正确的(围绕x轴45度),但平移似乎都是错误的。最后一列不应该是:

| 0 |
|650|
|650|

还是我做错了什么?

这是一个老问题,但我会给出一个记录在案的答案。


您所期望的是变换w_T_c,即从相机帧到世界帧。

GetViewTransformMatrix方法返回的是c_T_w,即从世界到相机帧的变换:给定世界帧p_w中的一个点,其在相机帧中的坐标为p_c=c_T_w*p_w

在您的示例中,如果您反转矩阵,那么在最后一列中,您将获得所需的转换值。

焦点与"注视"点不同。焦点可以在相机的前面或后面。它是场景中所有光线将穿过的点,以提供视图的透视图。这些光线将投影到视图平面上,即渲染的视图平面。

如果要查看原点,则需要将"视图平面法线"向量设置为从摄影机位置指向原点的规范化向量。因此,如果相机位置在位置L,则视图平面法线向量应为-L/||L||,其中||||是L-2范数。