Linux 3D Programming — VTK 5.0安裝指南

來源:互聯網
上載者:User
1. 首先在VTK的網站:http://www.vtk.org 上可以下載到VTK的源碼(VTK不提供Precompiled binary版本,所以,VTK的安裝都必須要手動自己編譯),Down下來之後解開。VTK的網站上還有VTK Data下載,這是VTK Example程式運行時所需要的資料檔案,如果我們想在安裝完VTK後做一些示範和測試,那麼就需要下載這個包。我的意見是不用下載了,VTK安裝完成 後,我們用VTK網站上提供的兩個Example Code,自己編譯運行一下,就可以知道VTK有沒有安裝成功了。

2. 解開包,看到根目錄下有一個README.html檔案,這就是安裝文檔,基本上照這個做就OK了,但這篇文檔中沒有講述CMake、Linux下的OpenGL庫等一些前提知識,所以下面還是將安裝步驟再講一遍。

3. 首先看到VTK的安裝需要cmake,這是kitware公司做的cross-platform的一個make工具。OK,那就先到 www.cmake.org下載cmake-2.2.3-x86-linux.tar.gz。解開發現裡面有一個tar檔案和一個readme,再解開 tar就OK了,由於下載的就是編譯好的版本,所以無需再編譯了。這裡我的做法是將tar檔案中的內容解壓到了/usr/local目錄下,這樣, /usr/local/bin目錄下就有cmake和ccmake這些可執行檔了。

4. cmake ready了,下面就按照文檔的做法開始編譯VTK了(以下假設VTK的source目錄在/home/software/VTK)。首先,建一個專門用 於vtk編譯的目錄,單獨建目錄的好處時,如果下次需要重新編譯源碼,源碼目錄無需動,只需重新再建一個build目錄就OK了。這裡,我建了這樣一個目 錄:/home/software/VTK-build,然後進入到這個目錄,輸入ccmake ../VTK,此時ccmake的互動式介面就出來了(如果需要改變C和C++的編譯器,請在執行ccmake ../VTK之前,export CC和CXX 兩個環境變數即可),然後按下 c 鍵,表示開始configure,此時,configure結束後,ccmake報錯,說無法自動找到OpenGL的include檔案和OpenGL的 庫(Linux下VTK是基於OpenGL的,OpenGL只提供了最基本的2D、3D繪圖所需的點、線、面等元素,Solaris上可能就是GLX,對 於基於VTK的開發人員來說,這些是透明的,因為VTK為上層開發人員提供了一個統一的介面,開發人員無需關心是什麼平台,只需調用VTK的一個factory class的建立方法,即可得到一個當前平台的Render class),要我手動在ccmake的advance模式下設定OPENGL_INCLUDE_DIR和OPENGL_gl_LIBRARY兩項。

5. 既如此,自然要解決這個問題,首先想到的是Mesa,這是當前Linux平台上OpenGL的一個最好實現,目前使用的人很多,所以,來到 http://www.mesa3d.org,下載了一個mesa 6.4.2,準備安裝。mesa提供了MesaDemos,MesaLib和MesaGLUT三個東西,其中Demos不用說了,MesaLib就包含了 libGL.so.1、libGLU.so.1這些OpenGL的核心庫,以及像glu.h等OpenGL的include標頭檔,所以,我們下載安裝這 個MesaLib就OK了,至於MesaGLUT,我們都知道,GLUT是OpenGL Utility Toolkit,是在OpenGL的基礎上做的一個簡單封裝和擴充,Mesa也實現相同的東西,所以叫MesaGLUT,這個東西可以不用裝,因為VTK 只需要GL和GLU兩個庫,裝上這個MesaGLUT也可以,我的建議還是裝上為好,反正不用也占不了多少地方,況且,MesaDemos就需要 MesaGLUT才可以運行,也許將來其他的應用也需要GLUT才能運行呢?所以,一併裝上。將MesaLib和MesaGLUT兩個包解開後,出現一個 MesaXXX的目錄,然後開始編譯。

6. 按照Mesa網站的文檔,首先來到Mesa原始碼目錄,執行make,列出了一堆支援的platform,最後有一個出錯資訊,但輸出資訊明確告訴我們可 以ignore這個錯誤,所以,繼續執行命令:make linux-x86(根據make的輸出資訊決定後面platform的關鍵字),就開始編譯Mesa的源碼了。這裡千萬要注意的是,安裝編譯Mesa之 前需要首先安裝XFree86的Develop包,這個在RedHat的光碟片上有,沒有安裝這部分的請先裝好這些再來安裝Mesa(可使用Linux的添 加/刪除程式工具來完成)。編譯完後,執行make install,此時指令碼會詢問將Mesa裝到什麼地方,比如include檔案到哪,lib檔案到哪等等,預設情況是 /usr/local/include和/usr/local/lib下,這樣就OK了,Easy!

7. 其實上述的做法,是編譯安裝了Mesa的Stand-alone/Xlib mode版本。意思就是這樣編譯出來的Mesa是依賴於XFree86的,是工作在XFree86上的;與此相反,Mesa還有一個 DRI/accelerated安裝模式,所謂DRI,指的就是不依賴於XFree86,直接操作顯卡,DRI也是一個opensource項目,如果要 使Mesa工作在DRI模式下,必須首先安裝DRI,安裝DRI還要改動Linux Kernel,有一些麻煩,所以這次沒有這麼做,但勿庸置疑的是,使用DRI,肯定效能會好很多,因為他直接操作顯卡。目前,已經有很多的顯卡廠商,如 ATI、NVIDIA都能支援DRI這個東東,所以,如果我們的繪圖對效能要求很高,還是用DRI吧(如果Mesa用DRI模式編譯,上面的make linux-x86的命令就要變成make linux-dri,不過遠不是改個命令就OK了,具體還是看Mesa網站中Compilation/Installation一節吧)。

8. OK,Mesa安裝完成後,我們可以用MesaDemos中帶的程式來驗證一下,要用MesaDemos,要安裝MesaGLUT哦!MesaDemos 包解開後,會在我們剛才安裝Mesa的目錄下產生一個progs的目錄,直接來到這個progs目錄下make就OK!然後執行Mesa最有名的 gears程式,看能否運行就OK了!

9. VTK現在可以安裝了,重新來,建立一個build目錄,然後ccmake ../VTK,果然,這次,沒有上述的錯誤資訊了,在ccmake的介面中,可以配置VTK是否編譯成shared library、改變CMAKE_INSTALL_PREFIX的一項還可以指定VTK安裝到哪個目錄下去,具體看VTK的那個README.html 吧,然後繼續按 c 鍵,記住,這裡只要我們對配置做了一些改動,就需要按下 c 鍵重新configure,直到沒有改動時,就可以按下 g 鍵,產生Makefile了。OK,ccmake完了,可以make,直接輸入make命令,開始編譯VTK,這個過程非常漫長,要耐心等(因為編譯C+ +程式比C程式慢多了),完成後輸入make install,安裝完畢!

10. 安裝完成了,我們就可以來寫個程式測測看了,用VTK官方的兩個Example就OK,不過這裡有三個問題需要注意:
(1)官方代碼中的第一個,就是畫一個Sphere的程式,需要將include語句中的""改成<>,因為我們在編譯時間會加入 -I,然後要在 #include <vtkActor.h>之前加入一句#include <vtkProperty.h>,因為vtkActor.h中這樣定義了class vtkProperty; ,這在g++編譯器中會被認為是forward declaration錯誤,即vtkProperty類之前沒有定義過,這裡不能這樣引用,所以要加入一句#include <vtkProperty.h>。有些編譯器就沒這個毛病,gcc是有的。
(2)編譯源碼還需要連結很多vtk的庫,這在vtk的文檔中,建議我們用cmake來自動產生makefile,不過現在我還不會,因為剛接觸vtk,所以,我們用笨辦法,我寫了這樣一個編譯命令,將/usr/local/lib下編譯出來的所有vtk庫都鏈進去:
g++ -o quadric -O3 -I/usr/local/include/vtk-5.0 -L/usr/local/lib -Wno-deprecated -lvtkCommon -lvtkDICOMParser -lvtkexoIIc -lvtkexpat -lvtkFiltering -lvtkfreetype -lvtkftgl -lvtkGenericFiltering -lvtkGraphics -lvtkHybrid -lvtkImaging -lvtkIO -lvtkjpeg -lvtkMPEG2Encode -lvtkNetCDF -lvtkpng -lvtkRendering -lvtksys -lvtktiff -lvtkVolumeRendering -lvtkWidgets -lvtkzlib quadric.cxx

這裡可以看到,vtk的標頭檔在/usr/local/include/vtk-5.0目錄下,庫在/usr/local/lib目錄下。

(3)編譯源碼的時候,gcc會說vtk的標頭檔什麼不符合規範什麼的,如果不想看到這些warning資訊,就可以像上面的命令一樣,在編譯命令列加上一個-Wno-deprecated開關就OK了。

11. 到此,VTK安裝、測試完畢。這裡還需要再提醒注意的是,編譯代碼的時候要加-I和-L開關,運行程式前要export LD_LIBRARY_PATH=/usr/local/lib,這樣代碼才能找到VTK和Mesa的庫檔案。尤其要注意的是,其實XFree86的包裡 面也有libGL.so.1,就在/usr/X11R6/lib目錄下(因為我裝了KDE,KDE要用QT,而QT就需要OpenGL),但是我們現在用 Mesa,所以,執行程式前要export LD_LIBRARY_PATH=/usr/local/lib,讓程式用正確的動態庫!如果不放心,可以在export動作完成後,用ldd <executable file>命令查看一下可執行檔用到了哪些庫檔案,就可清楚的查看到程式是否用了正確的庫了。

12. 其實現在考慮,應該不安裝Mesa也可以,就用XFree86的庫和Develop包中的標頭檔,反正本文中Mesa也是基於XFree86的,我看了一 下RedHat中libGL.so.1檔案的來源,也是來自XFree86-Mesa-Lib XXXXXX這個RPM的,所以,其實也就是Mesa。換句話說,應該在安裝完了XFree86的Develop Package後,libGL.so.1,gl.h, glu.h這些該有的東西也就都有了(都在/usr/include目錄和/usr/lib目錄下),所以,完全可以不用裝Mesa(除非裝Mesa的 DRI模式),不過這個沒有實驗過,只是目前想來,應該是完全可以的。畢竟RedHat的發行版中,OpenGL的這些東西都已經帶了。

 

再補充一個:“什麼是DRI”--官方解釋

The Direct Rendering Infrastructure, also known as the DRI, is a framework for allowing direct access to graphics hardware under the X Window System in a safe and efficient manner. It includes changes to the X server, to several client libraries, and to the kernel. The first major use for the DRI is to create fast OpenGL implementations.
The DRI is an integral part of XFree86 4.x , and integrates with Mesa, an open source implementation of the OpenGL API. Several 3D accelerated drivers have been written to the DRI specification, including drivers for chipsets produced by ATI, Matrox, 3DFX, and Intel.

The DRI was initially developed by Precision Insight, Inc. (PI) in cooperation with, and partially funded by Red Hat Inc., and SGI. Since PI's merger with VA Linux, and VA Linux' subsequent exit from Linux, the DRI is being maintained by Tungsten Graphics Inc., a new company formed by some of the initial DRI developers from PI. Tungsten Graphics is the current focal point for all DRI development, and many open source developers continue to contribute to the project through the DRI sourceforge project.

 

已經實驗證明,不需要安裝Mesa就可以完成VTK的安裝,只要安裝XFree86 Develop Package即可,動態庫和標頭檔分別會被安裝到/usr/lib, /usr/X11R6/lib和/usr/include/GL目錄下

 

windows版本的安裝需要VC,也就是微軟的C++編譯器,這裡我用的是Visual Studio 2003,因為這個版本對C++標準支援的最好,然後就是去下載VTK的源碼和VTKData以及CMake

CMake 的windows版本有個圖形介面,其實原理和操作和linux下一樣,只是這是圖形介面而已,然後就一步步的編譯,和linux下的一樣,只不過這裡的 cmake不產生makefile,而是產生.dsw、.sln這些微軟的Visual Studio的項目和工程檔案而已。

千萬注意:vtk網站提供的windows版本的可執行安裝檔案不可用!!!這個可執行檔裝完後,沒有任何的.dll, .lib,只有一堆tcl的檔案和庫,簡言之,不支援C++、JAVA,所以,不可用,必須我們自己手動build!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.