1. 程式人生 > 其它 >VTK學習記錄5-vtkCamera

VTK學習記錄5-vtkCamera

設定相機有兩種方法:一是先例項化vtkCamera,然後加入render渲染;二是獲取渲染render裡的相機,然後更新引數。效果一樣。

程式碼1:

1     vtkCamera *camera = vtkCamera::New();
2     camera->SetPosition(5, 0, 0);        //設定相機位置在x軸座標5上
3     camera->SetFocalPoint(-1.0, 0, 0);  //設定相機焦點指向x軸座標-1處
4     camera->SetViewUp(0, 1, 0);//設定相機向上位置指向y軸
5     render->SetActiveCamera(camera);

程式碼2:

1     render->GetActiveCamera()->SetPosition(5, 0, 0);
2     render->GetActiveCamera()->SetFocalPoint(-1.0, 0, 0);
3     render->GetActiveCamera()->SetViewUp(0, 1, 0);

完整程式碼:

 1 //tips:如果不是用cmake編譯,而是用vs編譯的,需要加這三行。
 2 #include "vtkAutoInit.h" 
 3 VTK_MODULE_INIT(vtkRenderingOpenGL2); //
VTK was built with vtkRenderingOpenGL2 4 VTK_MODULE_INIT(vtkInteractionStyle); 5 6 #include <vtkConeSource.h> 7 #include <vtkRenderer.h> 8 #include <vtkPolyDataMapper.h> 9 #include <vtkRenderWindow.h> 10 #include <vtkActor.h> 11 #include <vtkCamera.h> 12 #include <vtkRenderWindowInteractor.h> 13
#include <vtkInteractorStyleTrackballCamera.h> 14 #include <vtkInteractorStyleTrackballActor.h> 15 #include <vtkProperty.h> 16 #include <vtkLight.h> 17 #include <vtkCamera.h> 18 19 int main() 20 { 21 vtkConeSource *cone = vtkConeSource::New(); 22 cone->SetResolution(8); 23 cone->SetHeight(5); 24 cone->SetRadius(6); 25 26 vtkPolyDataMapper *coneMapper = vtkPolyDataMapper::New(); 27 coneMapper->SetInputData(cone->GetOutput()); 28 coneMapper->SetInputConnection(cone->GetOutputPort()); 29 30 vtkActor *vtkactor = vtkActor::New(); 31 vtkactor->SetMapper(coneMapper); 32 //vtkactor->GetProperty()->SetColor(1, 0, 0); 33 //不用GetProperty()的方法,用例項化Property的方法也可以。 34 vtkProperty *coneProperty = vtkProperty::New(); 35 coneProperty->SetColor(1.0, 0, 0.0); //可以自己設定顏色,非必須,預設銀色 36 vtkactor->SetProperty(coneProperty); 37 38 vtkRenderer *render = vtkRenderer::New(); 39 render->AddActor(vtkactor); 40 render->SetBackground(0.1, 0.2, 0.3); 41 42 //自己設定light 43 vtkLight *light = vtkLight::New(); 44 //light->SetSpecularColor(1.0, 0.0, 0.0); //設定地面光的顏色 45 //light->SetDiffuseColor(0.0, 1.0, 0.0);//設定反射光的顏色 46 light->SetColor(1, 0, 0);//設定光照顏色 47 render->AddLight(light); //有了light,需要渲染render才行 48 49 //方法1: 50 //vtkCamera *camera = vtkCamera::New(); 51 //camera->SetPosition(5, 0, 0); //設定相機位置在x軸座標5上 52 //camera->SetFocalPoint(-1.0, 0, 0); //設定相機焦點指向x軸座標-1處 53 //camera->SetViewUp(0, 1, 0);//設定相機向上位置指向y軸 54 //render->SetActiveCamera(camera); 55 56 //方法2:改變render裡面自帶的相機引數。 57 render->GetActiveCamera()->SetPosition(5, 0, 0); 58 render->GetActiveCamera()->SetFocalPoint(-1.0, 0, 0); 59 render->GetActiveCamera()->SetViewUp(0, 1, 0); 60 61 62 63 vtkRenderWindow *window = vtkRenderWindow::New(); 64 window->SetSize(500, 500); 65 window->AddRenderer(render); 66 67 vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New(); 68 interactor->SetRenderWindow(window);//關聯要互動的視窗 69 70 //現在設定控制的是相機,也可以實現相同的效果。 71 //vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); 72 //interactor->SetInteractorStyle(style); 73 74 //用這個就是設定控制演員 75 vtkInteractorStyleTrackballActor *style2 = vtkInteractorStyleTrackballActor::New(); 76 interactor->SetInteractorStyle(style2); 77 78 //旋轉程式碼 79 /*for (int i = 0; i < 1800; i++) 80 { 81 window->Render(); 82 render->GetActiveCamera()->Azimuth(1); 83 }*/ 84 85 interactor->Initialize(); 86 interactor->Start(); 87 88 89 cone->Delete(); 90 coneMapper->Delete(); 91 vtkactor->Delete(); 92 render->Delete(); 93 window->Delete(); 94 interactor->Delete(); 95 //style->Delete(); 96 return 0; 97 }
完整程式碼