zoukankan      html  css  js  c++  java
  • 在Ubuntu Server上使用vtk处理体数据,直接得到渲染结果图片避免显示窗口

    概述

    需要调用vtk对体数据进行渲染处理,处理结果直接存为图片而不通过窗口显示。

    直接使用vtkRenderWindow加上vtkWindowToImageFilter类写入,在调用渲染的过程中会出现窗口闪烁。

    最简单的方式为在调用vtkRenderwindow->Render()时,首先设置渲染窗口为off-screen渲染,调用函数OffScreenRenderingOn(),调用后窗口不会出现。

    如果使用桌面系统(windows或Ubuntu desktop等),创建的窗口可以在内存中不显示,此问题可以解决(效率不确定)。但使用Ubuntu server调用时会出现以下错误:
    bad x server connection

    基于版本:

    • Ubuntu Server 16.04.2 LTS
    • vtk 7.1.1
    • mesa 17.2.2
    • zlib 1.2.11

    思路

    vtk off-screen渲染需要调用x-server的渲染或mesa的渲染接口,UbuntuServer默认没有安装x-server,因此需要使用mesa中的osmesa(offscreen mesa)渲染。

    需要安装mesa的off-screen渲染支持,然后重新编译vtk为直接支持off-screen的版本。(两处编译均有坑)

    具体步骤

    安装osmesa

    • 安装gcc编译器(Ubuntu Server默认没有安装,Ubuntu desktop默认已经安装)

    sudo apt-get install build-essential

    • 安装zlib,安装时存在的依赖。官网下载安装

    ./configure
    make
    make install

    • 安装osmesa

    官方给出的安装选项为
    configure --enable-osmesa --disable-driglx-direct --disable-dri --with-gallium-drivers=swrast

    但是--disable-dri选项会出错,实际运行如下
    configure --enable-osmesa --disable-driglx-direct --with-gallium-drivers=swrast

    此处会出现成吨未知包(Ubuntu Server中,Ubuntu desktop貌似没有少这么多)
    懒得一个个找,照着网上的搜了一堆之后还是需要一个个找漏的。

    sudo apt-get install x11proto-gl-dev

    sudo apt-get install libdrm-dev libxxf86vm-dev libxt-dev xutils-dev flex bison xcb libx11-xcb-dev libxcb-glx0 libxcb-glx0-dev xorg-dev libxcb-dri3-dev libxcb-dri2-0-dev

    sudo apt-get install libxcb-xfixes0 libxcb-xfixes0-dev

    sudo apt-get install libxcb-present-dev libxcb-sync-dev

    sudo apt-get install libxshmfence-dev

    出现找不到的包时,可以使用 apt search pkg_name

    以上为吐槽,可以一步步执行,偷懒的话可以直接使用完整安装命令:

    sudo apt-get install x11proto-gl-dev libdrm-dev libxxf86vm-dev libxt-dev xutils-dev flex bison xcb libx11-xcb-dev libxcb-glx0 libxcb-glx0-dev xorg-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-xfixes0 libxcb-xfixes0-dev libxcb-present-dev libxcb-sync-dev libxshmfence-dev

    ./configure没有问题后,运行 make && make install,编译安装

    vtk 代码编译

    使用的cmake-gui,需要勾选advanced选项才能看到需要的设置项。

    与Google到的选项不怎么一样,不知道是不是版本问题,可以在search框中搜索选项修改。本文主要修改:

    • VTK_USE_OFFSCREEN on
    • VTK_OPENGL_HAS_OSMESA on
    • VTK_USE_X off

    之后使用正常方式编译执行代码

    同上,vtkRenderWindow在执行render之前调用函数OffScreenRenderingOn()

    得到的程序即可在Ubuntu Server下运行

    未知问题

    需要重启电脑???!! 原因未知,本来在ctrl+alt+f1中运行出错,使用ctrl+alt+f2打开另一个命令行之后程序运行没问题....

  • 相关阅读:
    java积累
    mybatis
    Netty
    springcloud相关笔记整理
    java基础总结笔记
    读书笔记-RocketMQ实战与原理解析
    读书笔记-kafka权威指南
    读书笔记-rabbitmq实战指南
    Centos 部署ServiceDesk
    IDEA将新建项目上传至GitLab
  • 原文地址:https://www.cnblogs.com/fly2wind/p/7662981.html
Copyright © 2011-2022 走看看