一、OpenGL3.0
vtk有个硬性要求就是OpenGL3.0及以上版本,由于笔者此前使用的是centos7,照着网上的教程配置OpenGL,但是之后glxinfo|grep OpenGL发现opengl只有2.1版本。导致怎么都跑不vtk的例程,后来又不知道怎么捣鼓,最后升级到了opengl3.0版本,后来又由于安装gmsh,导致底层库损坏,重装系统后,又不知道怎么升级。
首先,centos由于其图形化界面的原因,其本质和英伟达显卡驱动中OpenGL冲突,所以要么,升级显卡驱动时不安装OpenGL相关内容,要么你添加OpenGL相关内容导致centos进不去图形化界面。所以,通过升级显卡驱动更新OpenGL版本是个死胡同,行不通。
其次,mesa升级来更新OpenGL版本,或许能行得通,但是笔者失败了,编译总是没成功,系统还搞坏了一次,每次都是用系统备份重新修复,所以,系统备份非常有必要。
centos服务器的备份
推荐看看这篇博客,经常对服务器进行备份,别到时候系统奔溃再后悔莫及!
最后,笔者上述两个办法都没走通,无意间安装了centos8,查阅“glxinfo| grep OpenGL”发现,OpenGL居然自带了,而且还是3.1版本,就已经符合vtk的运行要求了。
不过呢,安装好centos8后,还得需要装一些OpenGL的库。
sudo dnf install mesa*
这样OpenGL的环境就配得差不多了。
二、例程
#include "widget.h"
#include <QApplication>
#include <vtkSphereSource.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
int main(int argc, char *argv[])
{
vtkSmartPointer<vtkSphereSource> sphereSource =vtkSmartPointer<vtkSphereSource>::New();
sphereSource->SetCenter(0.0, 0.0, 0.0);
sphereSource->SetRadius(5.0);
vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(sphereSource->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer =vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->SetBackground(.3, .6, .3); // Background color green
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
只需修改main.cpp即可,其余不动,并且需要添加头文件和库文件。
可参考我这篇博客
https://blog.csdn.net/weixin_58064141/article/details/128297444?spm=1001.2014.3001.5502
大致就是
LIBS += -L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkChartsCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonColor-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonComputationalGeometry-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonDataModel-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonExecutionModel-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonMath-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonMisc-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonSystem-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkCommonTransforms-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkDICOMParser-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkDomainsChemistry-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkDomainsChemistryOpenGL2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkdoubleconversion-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkexodusII-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkexpat-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersAMR-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersExtraction-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersFlowPaths-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersGeneral-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersGeneric-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersGeometry-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersHybrid-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersHyperTree-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersImaging-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersModeling-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersParallel-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersParallelImaging-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersPoints-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersProgrammable-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersSelection-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersSMP-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersSources-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersStatistics-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersTexture-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersTopology-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkFiltersVerdict-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkfreetype-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkGeovisCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkgl2ps-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkglew-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkGUISupportQt-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkGUISupportQtOpenGL-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkGUISupportQtSQL-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkhdf5-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkhdf5_hl-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingColor-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingFourier-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingGeneral-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingHybrid-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingMath-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingMorphological-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingSources-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingStatistics-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkImagingStencil-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkInfovisCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkInfovisLayout-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkInteractionImage-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkInteractionStyle-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkInteractionWidgets-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOAMR-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOAsynchronous-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOCityGML-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOEnSight-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOExodus-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOExport-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOExportOpenGL2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOExportPDF-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOGeometry-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOImage-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOImport-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOInfovis-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOLegacy-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOLSDyna-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOMINC-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOMovie-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIONetCDF-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOParallel-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOParallelXML-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOPLY-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOSegY-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOSQL-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOTecplotTable-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOVeraOut-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOVideo-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOXML-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkIOXMLParser-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkjpeg-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkjsoncpp-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtklibharu-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtklibxml2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtklz4-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtklzma-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkmetaio-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkNetCDF-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkogg-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkParallelCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkpng-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkproj-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkpugixml-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingAnnotation-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingContext2D-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingContextOpenGL2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingFreeType-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingGL2PSOpenGL2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingImage-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingLabel-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingLOD-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingOpenGL2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingQt-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingVolume-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkRenderingVolumeOpenGL2-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtksqlite-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtksys-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtktheora-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtktiff-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkverdict-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkViewsContext2D-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkViewsCore-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkViewsInfovis-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkViewsQt-8.2 \
-L$$PWD/../../../../usr/local/vtk8.2/lib64/ -lvtkzlib-8.2
INCLUDEPATH += $$PWD/../../../../usr/local/vtk8.2/include/vtk-8.2
DEPENDPATH += $$PWD/../../../../usr/local/vtk8.2/include/vtk-8.2
此时,能编译成功,但是运行的话,还需要在运行环境中添加第三方库,所以可以参照我上面的链接。
qt中可以跑起来。
但是,如果终端用qmake编译运行时,可能会提示
libvtkChartsCore-8.2.so.1: cannot open shared object file: No such file or directory
只需要终端
sudo ldconfig
之后编译运行,就可以在终端跑起来了。此时,vtk在centos中的开发环境搭建的差不多了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)