在Ubuntu Server上使用vtk处理体数据,直接得到渲染结果图片避免显示窗口
概述
需要調(diào)用vtk對體數(shù)據(jù)進(jìn)行渲染處理,處理結(jié)果直接存為圖片而不通過窗口顯示。
直接使用vtkRenderWindow加上vtkWindowToImageFilter類寫入,在調(diào)用渲染的過程中會(huì)出現(xiàn)窗口閃爍。
最簡單的方式為在調(diào)用vtkRenderwindow->Render()時(shí),首先設(shè)置渲染窗口為off-screen渲染,調(diào)用函數(shù)OffScreenRenderingOn(),調(diào)用后窗口不會(huì)出現(xiàn)。
如果使用桌面系統(tǒng)(windows或Ubuntu desktop等),創(chuàng)建的窗口可以在內(nèi)存中不顯示,此問題可以解決(效率不確定)。但使用Ubuntu server調(diào)用時(shí)會(huì)出現(xiàn)以下錯(cuò)誤:
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渲染需要調(diào)用x-server的渲染或mesa的渲染接口,UbuntuServer默認(rèn)沒有安裝x-server,因此需要使用mesa中的osmesa(offscreen mesa)渲染。
需要安裝mesa的off-screen渲染支持,然后重新編譯vtk為直接支持off-screen的版本。(兩處編譯均有坑)
具體步驟
安裝osmesa
- 安裝gcc編譯器(Ubuntu Server默認(rèn)沒有安裝,Ubuntu desktop默認(rèn)已經(jīng)安裝)
sudo apt-get install build-essential
- 安裝zlib,安裝時(shí)存在的依賴。官網(wǎng)下載安裝
./configure
make
make install
- 安裝osmesa
官方給出的安裝選項(xiàng)為
configure --enable-osmesa --disable-driglx-direct --disable-dri --with-gallium-drivers=swrast
但是--disable-dri選項(xiàng)會(huì)出錯(cuò),實(shí)際運(yùn)行如下
configure --enable-osmesa --disable-driglx-direct --with-gallium-drivers=swrast
此處會(huì)出現(xiàn)成噸未知包(Ubuntu Server中,Ubuntu desktop貌似沒有少這么多)
懶得一個(gè)個(gè)找,照著網(wǎng)上的搜了一堆之后還是需要一個(gè)個(gè)找漏的。
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
出現(xiàn)找不到的包時(shí),可以使用 apt search pkg_name
以上為吐槽,可以一步步執(zhí)行,偷懶的話可以直接使用完整安裝命令:
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沒有問題后,運(yùn)行 make && make install,編譯安裝
vtk 代碼編譯
使用的cmake-gui,需要勾選advanced選項(xiàng)才能看到需要的設(shè)置項(xiàng)。
與Google到的選項(xiàng)不怎么一樣,不知道是不是版本問題,可以在search框中搜索選項(xiàng)修改。本文主要修改:
- VTK_USE_OFFSCREEN on
- VTK_OPENGL_HAS_OSMESA on
- VTK_USE_X off
之后使用正常方式編譯執(zhí)行代碼
同上,vtkRenderWindow在執(zhí)行render之前調(diào)用函數(shù)OffScreenRenderingOn()
得到的程序即可在Ubuntu Server下運(yùn)行
未知問題
需要重啟電腦???!! 原因未知,本來在ctrl+alt+f1中運(yùn)行出錯(cuò),使用ctrl+alt+f2打開另一個(gè)命令行之后程序運(yùn)行沒問題....
轉(zhuǎn)載于:https://www.cnblogs.com/fly2wind/p/7662981.html
總結(jié)
以上是生活随笔為你收集整理的在Ubuntu Server上使用vtk处理体数据,直接得到渲染结果图片避免显示窗口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 170329、用 Maven 部署 wa
- 下一篇: Ubuntu android 开发配置