如何解释VtkCamera视图TransformMatrix
How to interpret the VtkCamera viewTransformMatrix
我在原点有一个物体,正在将相机移动到(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范数。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 视图中的参数推导失败:take_while
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在另一个类视图中添加最多2个图表的正确方法是什么
- OpenVR:向视图方向移动
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 将所选值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
- 如何在不使用滚动条的情况下使视图更改
- 列表视图更改选择颜色
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 如何从未知视图中声明范围::v3::View 变量
- 控制带有信号/插槽的Qt QML滑动视图
- 列表视图项的替代颜色
- 带有 GDB 调试器的 VS 代码内存视图
- 如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情
- 从资源视图访问对话框时出现问题
- 范围修剪视图实现不适用于反向视图
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- 如何解释VtkCamera视图TransformMatrix