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 }



浙公网安备 33010602011771号