最近写项目时被这个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);//越近越大