centos搭建vtk开发环境

一、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中的开发环境搭建的差不多了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值