在工作中使用到了修改相机的旋转角度,获取图像;
或者是使用SetPosition
和SetFocalPoint
设置与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();
达到预期的效果,解决问题;