走进电影院观看VTK

  • VTK影院模型:

  从这个模型去介绍VTK的应用,整个电影院就是VTK的显示窗口(vtkRenderWindow),舞台就是VTK的渲染场景(vtkRenderer),场景中有不同的演员就是VTK的各种三维模型(vtkActor),演员身材长相动作表情各不相同就像模型有大有小颜色各异就是VTK模型属性(vtkPorperty),台下的观众与演员进行交互就是VTK中窗口与鼠标等的交互(vtkRenderWindowInteractor),然而观众与演员的交互方式也不一样,有的挥手有的呐喊就像VTK中有时用鼠标有时用键盘(vtkInteractorStyle),在我们观看时,我们在电影院的前排后排靠左靠右买票时就决定了,因此对于一个人只有一个视角就像VTK中的相机(vtkCamera),根据距离远近位置不同看到的舞台人物大小不同。舞台上的灯光就像VTK中的灯光(vtkLight)有很多灯光配合衬托舞台效果。下面是一个简单地例子:

 

  • 代码解释如下:
 1 #include <vtkAutoInit.h> 
 2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
 3 VTK_MODULE_INIT(vtkInteractionStyle);
 4 #include <vtkActor.h>
 5 #include <vtkCamera.h>
 6 #include <vtkLight.h>
 7 #include <vtkCylinderSource.h>
 8 #include <vtkConeSource.h>
 9 #include <vtkFloatArray.h>
10 #include <vtkNamedColors.h>
11 #include <vtkNew.h>
12 #include <vtkPointData.h>
13 #include <vtkPoints.h>
14 #include <vtkPolyData.h>
15 #include <vtkPolyDataMapper.h>
16 #include <vtkRenderer.h> 
17 #include <vtkRenderWindow.h>
18 #include <vtkRenderWindowInteractor.h>
19 #include <vtkInteractorStyleTrackballCamera.h>
20 #include <array>
21 
22 int main()
23 {//演员训练成什么类型,想要一个圆柱样子
24     vtkNew<vtkCylinderSource> cylinder;
25     cylinder->SetHeight(3.0);//柱体的高
26     cylinder->SetRadius(1.0);//柱体的横截面半径
27     cylinder->SetResolution(10);//柱体的等边多边形边数
28 //根据想要的圆柱演员样子,将他渲染训练成该样
29     vtkNew < vtkPolyDataMapper>cylinderMapper;
30     cylinderMapper->SetInputConnection(cylinder->GetOutputPort());
31     vtkNew < vtkActor>cylinderActor;//演员产生
32     cylinderActor->SetMapper(cylinderMapper);
33     vtkNew < vtkRenderer>renderer;//搭建舞台
34     renderer->AddActor(cylinderActor);//所有演员中的哪一个要上台
35     renderer->SetBackground(0.6, 0.5, 0.4);//舞台背景
36     vtkNew < vtkRenderWindow>renWin;//指定电影院
37     renWin->AddRenderer(renderer);//指定电影院要播放的电影(舞台)
38     renWin->SetSize(500, 500);//建立影院大小
39     
40     vtkNew<vtkRenderWindowInteractor> iren;//表演中有互动
41     iren->SetRenderWindow(renWin);//和那个演出互动
42     vtkNew<vtkInteractorStyleTrackballCamera>style;//互动的形式是什么
43 
44     iren->SetInteractorStyle(style);
45     iren->Initialize();
46     iren->Start();
47 
48     return EXIT_SUCCESS;
49 }
posted @ 2019-12-28 18:33  静精进境  阅读(777)  评论(0编辑  收藏  举报