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 }
完整代码

 

 

 

posted @ 2021-07-16 15:20  QAQ_BIU  阅读(654)  评论(0)    收藏  举报