VTK笔记-vtkCamera相机向ViewUp方向旋转90°后遇到的问题

在工作中使用到了修改相机的旋转角度,获取图像;
或者是使用SetPositionSetFocalPoint设置与ViewUp相平行时,也会出现相机以一种难以理解的将物体转向周围一个度数。
网上有人遇到“当使用Elevation旋转+90°或者-90°时,图像会以一种难以理解的将物体转向周围一个度数。”,跟我遇到的情况不一样;
在StackOverflow上有问题:Problems using the VTK camera function elevation
使用OrthogonalizeViewUp()函数可以解决这个问题;

OrthogonalizeViewUp

函数声明如下:

void vtkCamera::OrthogonalizeViewUp();

函数解释中写道:重新计算ViewUp向量,使其与摄影机坐标到焦点坐标的向量垂直。除非要在相机上使用Yaw偏航或Azimuth方位角,否则没有必要这样做。
VTK 对 camera 的操作方法如下中写道:基于焦点,使用Azimuth()和Elevation()方法设置相机的方位角和高度角/仰角(度,degree)[球坐标系统]。注意其中在南极和北极存在奇异点,即视向量平行于视平面法向。此时可以使用OrthogonalizeViewUp()方法强制其正交。但这会改变相机坐标系统。

将之前的代码修改如下:

camera->Azimuth(it->x_rotate_angle);
camera->Elevation(it->y_rotate_angle);
camera->Roll(it->z_rotate_angle);
camera->OrthogonalizeViewUp();
camera->SetPosition(position[0] + it->x_position, position[1] + it->y_position, position[2] + it->z_position);
camera->SetFocalPoint(focalPoint_position[0],focalPoint_position[1],focalPoint_position[2]);
renderer->ResetCameraClippingRange();

达到预期的效果,解决问题;

猜你喜欢

转载自blog.csdn.net/liushao1031177/article/details/120871990