概述

需要调用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打开另一个命令行之后程序运行没问题....

在Ubuntu Server上使用vtk处理体数据,直接得到渲染结果图片避免显示窗口的更多相关文章

  1. 一台Ubuntu server上安装多实例MySQL

    受环境所迫,在一台Ubuntu server上安装多个实例MySQL. 手动安装MySQL 环境:Ubuntu server 11.10 64bit + mysql-5.5.17-linux2.6-x ...

  2. Docker-Compose简介与Ubuntu Server 上安装Compose

    Compose简介 Compose是Docker官方的开源项目,负责对Docker容器集群的快速编排. Compose是定义和运行多个Docker容器的应用. 举例来说: 一个项目除了Tomcat容器 ...

  3. Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. 在ubuntu server上搭建Hadoop

    1. Java安装: Because everything work with java. $ sudo apt-get install openjdk-7-jdk 安装之后,可以查看java的版本信 ...

  5. Ubuntu Server 上在安装Nginx时执行./confgiure后提示:C compiler cc is not found

    场景 Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...

  6. 实战Ubuntu Server上配置LXDE+VNC环境

    1.安装x-window 使用apt-get 安装 xorg sudo apt-get install xorg 如果提示以下内容,就说明需要update下源列表,使用sudo apt-get upd ...

  7. 在Ubuntu Server上源码安装OpenERP 8.0,并配置wsgi和nginx运行环境

    原文: How to install OpenERP 8.0 Alpha on a fresh Debian / Ubuntu server. OpenERP的安装,可以有多种方式,通过添加源,到 h ...

  8. Ubuntu Server上的LVM配置

    在安装Linux的时候,通常遇到的一个比较头痛的问题就是分区,到底每个区该分多少,用了一段时间之后,某个分区又不够用了,该怎么办?如果是普通的服务器,那一切都好说,大不了就关机重新划分分区嘛,但是对于 ...

  9. Nagios在Ubuntu server上的安装配置

    首先我参看的是Nagios的官方文档,Nagios – Installing Nagios Core From Source——The Industry Standard in IT Infrastr ...

随机推荐

  1. jmeter接口测试中的用例数据分离

    用jmeter做接口测试的话,一个jmx文件就可以是一个用例,而用例的设计多数还是等价类.边界值等方法.用例越来越多的时候,维护比较麻烦,所以可以把用例的数据存在csv文件中,然后通过组件(CSV D ...

  2. 使用docker搭建reids主从,哨兵。

    Redis主从配置,如果没有真机就要用虚拟机,使用Docke for Windows host网络有问题. 准备: 1.安装虚拟机. 2.下载redis的安装文件:http://download.re ...

  3. 定时任务cron表达式详解

    参考自:https://blog.csdn.net/fanrenxiang/article/details/80361582 一 cron表达式 顺序 秒 分 时 日期 月份 星期 年(可选) 取值 ...

  4. MP4数据封装格式

    一 .MP4   https://blog.csdn.net/sdsszk/article/details/90719075 MP4   由很多个ATOM 嵌套构成,主要的ATOM包括  [ftyp] ...

  5. Hadoop HA 搭建

    Hadoop HA 什么是 HA HA是High Available缩写,是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点.通常 ...

  6. 【转载】 C#使用Union方法求两个List集合的并集数据

    在C#语言的编程开发中,有时候需要对List集合数据进行运算,如对两个List集合进行交集运算或者并集运算,其中针对2个List集合的并集运算,可以使用Union方法来快速实现,Union方法的调用格 ...

  7. php上传文件报错以及对应代号信息-转载http://jewel-m.iteye.com/blog/1210344

    用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常.$_FILES[field ...

  8. python OpenCV使用

    关于OpenCV简介  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C ...

  9. Mac下多版本JDK安装及管理

    在Java项目中,经常对JDK版本有不同的要求,可是不可能为了某个项目的运行重新下载不同版本JDK进行安装,这样就涉及到对本地环境中多个JDK版本的管理. Mac的JDK都是安装到一个指定目录的:/L ...

  10. Android笔记(十九) Android中的Fragment

    通常我们使用Activity来展示界面,但是在手机上界面可能显示的很好看,但在平板上,因为平板的屏幕非常大,手机的界面放在平板上可能会出现控件被拉长.控件之间间距变大等问题.为了更好的体验效果,在Ac ...