Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何解释VtkCamera viewTransformMatrix_C++_Math_Opengl_Geometry_Vtk - Fatal编程技术网

C++ 如何解释VtkCamera viewTransformMatrix

C++ 如何解释VtkCamera viewTransformMatrix,c++,math,opengl,geometry,vtk,C++,Math,Opengl,Geometry,Vtk,我在原点有一个对象,正在将相机移动到(0650650),并将焦点设置到原点,即: vtkSmartPointer<vtkCamera> cam = vtkSmartPointer<vtkCamera>::New(); renderer->SetActiveCamera(cam); cam->SetFocalPoint(0., 0., 0.); cam->SetPosition(0., 650, 650); cam->SetViewAngle(vi

我在原点有一个对象,正在将相机移动到(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.);
旋转部分似乎正确(围绕x轴旋转45度),但平移似乎完全错误。如果最后一列不是:

| 0 |
|650|
|650|

还是我做错了什么?

焦点与“注视”点不同。焦点可能在相机的前面或后面。这是一个点,场景中的所有光线都将通过该点以提供您的视图透视。这些光线被投影到视图平面上,视图平面就是渲染的平面


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

这是一个老问题,但我会给出一个答案以供记录。
您所期望的是变换w_T_c,即从相机帧到世界帧

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


在您的示例中,如果您反转矩阵,则在最后一列中,您将得到您要查找的平移值。

根据vtk文档(此处:)的说明,在方法
GetViewTransformMatrix()
“ViewTransform仅取决于三个IVAR:位置、焦点和ViewUp向量。”查看vtkCamera文档后,方法
SetViewPlaneNormal
已被弃用。也许您可以展示一些代码来实现这一点?然而,旋转矩阵似乎是正确的,所以这不意味着相机面对的是正确的点,即本例中的原点吗?文档中说“[ViewPlaneNormal]方法已被弃用。视图平面法线是根据ViewShear从DirectionOfProjection自动设置的。”它还说“[视图平面法线]将指向与投影方向相反的方向,除非已使用SetViewShear/SetColliqueAngles创建剪切输出视图。“因此,请改用DirectionOfProjection方法。。。在这种情况下,它就是L/| | L | |。我没有任何代码;我从未使用过vtk。为了回应您的第一个评论,文档还声明“[vtkCamera类]提供了定位和定向视点和焦点的方法”。这意味着他们将视点和焦点视为通常不同的,与这两个术语的常用用法一致。他们可能使用焦点和相机位置(人为地)约束相机属性;然而,我阅读的文档中没有提到这些约束。简而言之,我看不出文档中的两个语句是如何协调的。
| 1 |    0    |    0    |     0    | 
| 0 | cos(45) | -sin(45)|     0    | 
| 0 | sin(45) | cos(45) | -919.239 | 
| 0 |    0    |    0    |     1    | 
| 0 |
|650|
|650|