最近写项目时被这个camera搞得晕头转向的,先介绍下camera的一些常用接口
1、
ParallelProjectionOn
()开启平行光投影,需要注意的时一旦你用了这个你后面对camera的setpostion()、zoom()这些操作都无法正常生效,想要改变大小你只能通过SetParallelScale(int temp)这个数表示着camera到图像距离越小图像就越大
2、
OrthogonalizeViewUp
()设置正交角度,这个一般和1那个函数一起用
3、
ComputeViewPlaneNormal
()基于当前的位置和焦点重置视平面法向,否则会出现斜推剪切效果,这个我一般和resetCamera()一起用,就是说在初始化的用
4、
ResetCameraClippingRange
()重置相机的最远端和最近段的距离范围,这个我遇到的是我用了setpostion然后没效果后面加这个函数就行了
5、
SetVierAngle
(double angle)默认角度是30°如果是平行投影,这个函数也无效
6、vtkCamera::
Dolly
(),vtkCamera::
Roll
()旋转,vtkCamera::
Azimuth
()(纬度),vtkCamera::
Yaw
(),vtkCamera::
Elevation
()(经度),vtkCamera::
Pitch
(),vtkCamera::
Zoom
()这些都是可以控制camera的移动
下面是我使用的几个接口:
构造函数
:m_render->GetActiveCamera()->ParallelProjectionOn();//二维的开启平行光投影
m_render->GetActiveCamera()->OrthogonalizeViewUp();//设置正交角度
设置远近交互
:double temp_scale = m_viewer->GetRenderer()->GetActiveCamera()->GetParallelScale();
m_viewer->GetRenderer()->GetActiveCamera()->SetParallelScale(temp_scale–);
m_viewer->GetRenderer()->GetActiveCamera()->SetParallelScale(temp_scale++);//由于开启了平行投影,用zoom会出现bug,用setpostion没用也不知道为啥
初始化reset
: this->m_render->ResetCamera();
this->m_render->GetActiveCamera()->ComputeViewPlaneNormal();
this->m_render->GetActiveCamera()->SetParallelScale(75.0);//越近越大