操作系统:win 10
QT: 5.15.2
VTK : 9.1
一、VTK库编译
1、从官网下载vtk 库现在已经更新到9.2.2 了
2、下载Cmake
3、使用Cmake 编译vtk源码
注意点 :
1、有三个路径,source build install
2、对应Qt的安装位置
4、使用vs 生产要bulid 两次,一次是debug 还有一次是release
二、VTK 库引入
如何先键的项目是这种情况,那么就说明我们确实vtk 相关的库,我们要在pro 文件中加载库
1 # VTK
2 win32:CONFIG(release, debug|release):LIBS += -LD:/pcl_lib/VTK/lib\
3 -lvtkChartsCore-9.1\
4 -lvtkCommonColor-9.1\
5 -lvtkCommonComputationalGeometry-9.1\
6 -lvtkCommonCore-9.1\
7 -lvtkCommonDataModel-9.1\
8 -lvtkCommonExecutionModel-9.1\
9 -lvtkCommonMath-9.1\
10 -lvtkCommonMisc-9.1\
11 -lvtkCommonSystem-9.1\
12 -lvtkCommonTransforms-9.1\
13 -lvtkDICOMParser-9.1\
14 -lvtkDomainsChemistry-9.1\
15 -lvtkDomainsChemistryOpenGL2-9.1\
16 -lvtkdoubleconversion-9.1\
17 -lvtkexodusII-9.1\
18 -lvtkexpat-9.1\
19 -lvtkFiltersAMR-9.1\
20 -lvtkFiltersCore-9.1\
21 -lvtkFiltersExtraction-9.1\
22 -lvtkFiltersFlowPaths-9.1\
23 -lvtkFiltersGeneral-9.1\
24 -lvtkFiltersGeneric-9.1\
25 -lvtkFiltersGeometry-9.1\
26 -lvtkFiltersHybrid-9.1\
27 -lvtkFiltersHyperTree-9.1\
28 -lvtkFiltersImaging-9.1\
29 -lvtkFiltersModeling-9.1\
30 -lvtkFiltersParallel-9.1\
31 -lvtkFiltersParallelImaging-9.1\
32 -lvtkFiltersPoints-9.1\
33 -lvtkFiltersProgrammable-9.1\
34 -lvtkFiltersSelection-9.1\
35 -lvtkFiltersSMP-9.1\
36 -lvtkFiltersSources-9.1\
37 -lvtkFiltersStatistics-9.1\
38 -lvtkFiltersTexture-9.1\
39 -lvtkFiltersTopology-9.1\
40 -lvtkFiltersVerdict-9.1\
41 -lvtkfmt-9.1\
42 -lvtkfreetype-9.1\
43 -lvtkGeovisCore-9.1\
44 -lvtkgl2ps-9.1\
45 -lvtkglew-9.1\
46 -lvtkGUISupportQt-9.1\
47 -lvtkGUISupportQtQuick-9.1\
48 -lvtkGUISupportQtSQL-9.1\
49 -lvtkhdf5-9.1\
50 -lvtkhdf5_hl-9.1\
51 -lvtkImagingColor-9.1\
52 -lvtkImagingCore-9.1\
53 -lvtkImagingFourier-9.1\
54 -lvtkImagingGeneral-9.1\
55 -lvtkImagingHybrid-9.1\
56 -lvtkImagingMath-9.1\
57 -lvtkImagingMorphological-9.1\
58 -lvtkImagingSources-9.1\
59 -lvtkImagingStatistics-9.1\
60 -lvtkImagingStencil-9.1\
61 -lvtkInfovisCore-9.1\
62 -lvtkInfovisLayout-9.1\
63 -lvtkInteractionImage-9.1\
64 -lvtkInteractionStyle-9.1\
65 -lvtkInteractionWidgets-9.1\
66 -lvtkIOAMR-9.1\
67 -lvtkIOAsynchronous-9.1\
68 -lvtkIOCGNSReader-9.1\
69 -lvtkIOChemistry-9.1\
70 -lvtkIOCityGML-9.1\
71 -lvtkIOCONVERGECFD-9.1\
72 -lvtkIOCore-9.1\
73 -lvtkIOEnSight-9.1\
74 -lvtkIOExodus-9.1\
75 -lvtkIOExport-9.1\
76 -lvtkIOExportGL2PS-9.1\
77 -lvtkIOExportPDF-9.1\
78 -lvtkIOGeometry-9.1\
79 -lvtkIOHDF-9.1\
80 -lvtkIOImage-9.1\
81 -lvtkIOImport-9.1\
82 -lvtkIOInfovis-9.1\
83 -lvtkIOIOSS-9.1\
84 -lvtkIOLegacy-9.1\
85 -lvtkIOLSDyna-9.1\
86 -lvtkIOMINC-9.1\
87 -lvtkIOMotionFX-9.1\
88 -lvtkIOMovie-9.1\
89 -lvtkIONetCDF-9.1\
90 -lvtkIOOggTheora-9.1\
91 -lvtkIOParallel-9.1\
92 -lvtkIOParallelXML-9.1\
93 -lvtkIOPLY-9.1\
94 -lvtkIOSegY-9.1\
95 -lvtkIOSQL-9.1\
96 -lvtkioss-9.1\
97 -lvtkIOTecplotTable-9.1\
98 -lvtkIOVeraOut-9.1\
99 -lvtkIOVideo-9.1\
100 -lvtkIOXML-9.1\
101 -lvtkIOXMLParser-9.1\
102 -lvtkjpeg-9.1\
103 -lvtkjsoncpp-9.1\
104 -lvtkkissfft-9.1\
105 -lvtklibharu-9.1\
106 -lvtklibproj-9.1\
107 -lvtklibxml2-9.1\
108 -lvtkloguru-9.1\
109 -lvtklz4-9.1\
110 -lvtklzma-9.1\
111 -lvtkmetaio-9.1\
112 -lvtknetcdf-9.1\
113 -lvtkogg-9.1\
114 -lvtkParallelCore-9.1\
115 -lvtkParallelDIY-9.1\
116 -lvtkpng-9.1\
117 -lvtkpugixml-9.1\
118 -lvtkRenderingAnnotation-9.1\
119 -lvtkRenderingContext2D-9.1\
120 -lvtkRenderingContextOpenGL2-9.1\
121 -lvtkRenderingCore-9.1\
122 -lvtkRenderingFreeType-9.1\
123 -lvtkRenderingGL2PSOpenGL2-9.1\
124 -lvtkRenderingImage-9.1\
125 -lvtkRenderingLabel-9.1\
126 -lvtkRenderingLOD-9.1\
127 -lvtkRenderingOpenGL2-9.1\
128 -lvtkRenderingQt-9.1\
129 -lvtkRenderingSceneGraph-9.1\
130 -lvtkRenderingUI-9.1\
131 -lvtkRenderingVolume-9.1\
132 -lvtkRenderingVolumeOpenGL2-9.1\
133 -lvtkRenderingVtkJS-9.1\
134 -lvtksqlite-9.1\
135 -lvtksys-9.1\
136 -lvtkTestingRendering-9.1\
137 -lvtktheora-9.1\
138 -lvtktiff-9.1\
139 -lvtkverdict-9.1\
140 -lvtkViewsContext2D-9.1\
141 -lvtkViewsCore-9.1\
142 -lvtkViewsInfovis-9.1\
143 -lvtkViewsQt-9.1\
144 -lvtkWrappingTools-9.1\
145 -lvtkzlib-9.1
然后执行qmake,并进行编译和运行
三、、控件提升(将一个widget 提升为QVTKOpenGLNativeWidget)
首先在UI界面个widget ,布局成水平布局
运行看一下,没有问题。
QOpenGLWidget允许在平台支持时使用不同的OpenGL版本和配置文件。只需通过setFormat()设置请求的格式。但在同一窗口中有多个QOpenGLWidget,要求它们都使用相同的格式,或者至少不是环境共享的格式。要解决此问题,使用QSurfaceFormat :: setDefaultFormat(),而不是setFormat()。
注意:在请求OpenGL核心配置文件上下文时,在构造QApplication实例之前调用QSurfaceFormat :: setDefaultFormat()在某些平台(例如,macOS)上是必需的。这是为了确保上下文之间的资源共享保持功能,因为所有内部上下文都是使用正确的版本和配置文件创建的
vtkActor:
表示渲染场景中的对象(几何和属性)。
vtkActor用于表示呈现场景中的实体。它继承了vtkProp中与角色位置和方向相关的函数。actor还具有缩放功能,并维护对定义几何的引用(即、呈现属性,可能还有纹理映射。vtkActor将这些实例变量组合成一个4x4转换矩阵
VKT宏初始化:
在使用vtk 之前一定要在前面加上初始化的相关代码,不然程序当中是无法new 出对象的
1 #include "vtkAutoInit.h" // vtk初始化的方式
2 VTK_MODULE_INIT(vtkRenderingOpenGL2); // 渲染
3 VTK_MODULE_INIT(vtkInteractionStyle); // 相互做用方式
4 VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2); //
5 VTK_MODULE_INIT(vtkRenderingFreeType);
1 // 获得默认的opengl的配置
2 QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat(true));
3 vtkNew<vtkNamedColors> colors;
4 vtkNew<vtkSphereSource> shereSource;
5
6 vtkNew<vtkPolyDataMapper> shereMapper;
7 shereMapper->SetInputConnection(shereSource->GetOutputPort());
8 // 声明一个actor 类,然后使用这个类来显示球体
9 vtkNew<vtkActor> shereActor;
10 shereActor->SetMapper(shereMapper);
11 // 设置颜色
12 shereActor->GetProperty()->SetColor(colors->GetColor4d("Tomato").GetData());
13 // 渲染
14 vtkNew<vtkRenderer> renderer;
15 renderer->AddActor(shereActor);
16 renderer->SetBackground(colors->GetColor3d("SteelBlue").GetData());
17 // 显示renderer 的窗口
18 vtkNew<vtkGenericOpenGLRenderWindow> renderwindow;
19
20 renderwindow->AddRenderer(renderer);
21 renderwindow->SetWindowName("RenderWindowNoUIFile");
22
23
24 // 最后开始调用
25 QHBoxLayout * hl=new QHBoxLayout(this);
26 hl->addWidget(ui->qvtkWidget);
27 ui->qvtkWidget->setRenderWindow(renderwindow);
28 setLayout(hl);