OpenCV
- OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺和機器學習軟件庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。 它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。
- opencv官網
- github源碼
OpenGL
- OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者“開放式圖形庫”)是用于渲染2D、3D矢量圖形的跨語言、跨平臺的應用程序編程接口(API)。這個接口由近350個不同的函數調用組成,用來從簡單的圖形比特繪制復雜的三維景象。而另一種程序接口系統是僅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虛擬實境、科學可視化程序和電子游戲開發。
- opengl官網
- 入門教程
OpenSceneGraph
- OpenSceneGraph 能夠更加快速、便捷地創建高性能、跨平臺的交互式圖形程序。OpenSceneGraph是一個開放源碼,跨平臺的圖形開發包,它為諸如飛行器仿真,游戲,虛擬現實,科學計算可視化這樣的高性能圖形應用程序開發而設計。它基于場景圖的概念,它提供一個在OpenGL之上的面向對象的框架,從而能把開發者從實現和優化底層圖形的調用中解脫出來,并且它為圖形應用程序的快速開發提供很多附加的實用工具。
Vulkan
- Vulkan是一個跨平臺的2D和3D繪圖應用程序接口(API),最早由科納斯組織(Khronos Group)在2015年游戲開發者大會(GDC)上發表。科納斯最先把VulkanAPI稱為“下一代OpenGL行動”(next generation OpenGL initiative)或“glNext”, 但在正式宣布Vulkan之后這些名字就沒有再使用了。就像OpenGL,Vulkan針對實時3D程序(如電子游戲)設計,Vulkan并計劃提供高性能和低CPU管理負擔(overhead),這也是Direct3D12和AMD的Mantle的目標。Vulkan兼容Mantle的一個分支,并使用了Mantle的一些組件。
WebGL
- WebGL(全寫Web Graphics Library)是一種3D繪圖協議,這種繪圖技術標準允許把JavaScript和OpenGL ES 2.0結合在一起,通過增加OpenGL ES 2.0的一個JavaScript綁定,WebGL可以為HTML5 Canvas提供硬件3D加速渲染,這樣Web開發人員就可以借助系統顯卡來在瀏覽器里更流暢地展示3D場景和模型了,還能創建復雜的導航和數據視覺化。顯然,WebGL技術標準免去了開發網頁專用渲染插件的麻煩,可被用于創建具有復雜3D結構的網站頁面,甚至可以用來設計3D網頁游戲等等。
OpenCL
- OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向異構系統通用目的并行編程的開放式、免費標準,也是一個統一的編程環境,便于軟件開發人員為高性能計算服務器、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用于多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他并行處理器,在游戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。
CUDA
- CUDA(Compute Unified Device Architecture),是顯卡廠商NVIDIA推出的運算平臺。 CUDA?是一種由NVIDIA推出的通用并行計算架構,該架構使GPU能夠解決復雜的計算問題。 它包含了CUDA指令集架構(ISA)以及GPU內部的并行計算引擎。 開發人員可以使用C語言來為CUDA?架構編寫程序,C語言是應用最廣泛的一種高級編程語言。所編寫出的程序可以在支持CUDA?的處理器上以超高性能運行。CUDA3.0已經開始支持C++和FORTRAN。
DirectX
- DirectX(Direct eXtension,簡稱DX)是由微軟公司創建的多媒體編程接口,是一種應用程序接口(API)。DirectX可以讓以windows為平臺的游戲或多媒體程序獲得更高的執行效率,加強3D圖形和聲音效果,并提供設計人員一個共同的硬件驅動標準,讓游戲開發者不必為每一品牌的硬件來寫不同的驅動程序,也降低用戶安裝及設置硬件的復雜度。DirectX已被廣泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE電子游戲開發。
Direct3D
- 由微軟公司所制定的3D規格界面,與Windows 95和Windows NT操作系統兼容性好,可繞過圖形顯示接口(GDI)直接進行支持該API的各種硬件的底層操作,大大提高了游戲的運行速度。Direct 3D是基于微軟的通用對象模式COM(Common Object Mode)的3D圖形API。它是由微軟(Microsoft)一手樹立的3D API規范,微軟公司擁有該庫版權,它所有的語法定義包含在微軟提供的程序開發組件的幫助文件、源代碼中。Direct3D是微軟公司DirectX SDK集成開發包中的重要部分,適合多媒體、娛樂、即時3D動畫等廣泛和實用的3D圖形計算。自1996年發布以來,Direct3D以其良好的硬件兼容性和友好的編程方式很快得到了廣泛的認可,現在幾乎所有的具有3D圖形加速的主流顯示卡都對Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以較為復雜,穩定性差,另外,目前只在Windows平臺上可用。
DirectX和Direct3D區別與聯系
- direct3D只是directX其中一個模塊。
- DirectX是由很多API組成的,按照性質分類,可以分為四大部分:顯示部分、聲音部分、輸入部分和網絡部分。
- 顯示部分擔任圖形處理的關鍵,分為DirectDraw(DDraw)和Direct3D(D3D)。前者主要負責2D圖像加速,它包括很多方面:我們播放DVD電影、看圖、玩小游戲等等都是用的DDraw,你可以把它理解成所有劃線的部分都是用的DDraw;后者則主要負責3D效果的顯示,比如CS中的場景和人物等,都是使用了DirectX的Direct3D。
- 聲音部分中最主要的API是DirectSound,除了播放聲音和處理混音之外,還加強了3d音效,并提供了錄音功能。比如聲卡兼容,就是利用了DirectSound來解決的。
- 輸入部分DirectInput可以支持很多的游戲輸入設備,它能夠讓這些設備充分發揮最佳狀態和全部功能。除了鍵盤和鼠標之外還可以連接手柄、搖桿、模擬器等。
- 網絡部分DirectPlay主要就是為了具有網絡功能游戲而開發的,提供了多種連接方式,TPC/IP,IPX,Modem,串口等,讓玩家可以用各種聯網方式來進行對戰,此外也提供網絡對話功能及保密措施。
????????vtk是一個算法庫,里面包括了很多挺不錯的算法,如果做有限元云圖,等值線,特別是醫療方面的算法,有很大的參加價值,我曾經把它的等值線算法提取出來
????????一個類就可以實現,主要函數就三四個,而且同時實現了云圖,等值線,比網上的追蹤算法要簡單許多,它是一種柵格算法,國外的的維基百科有介紹,但是維基百科上的介紹和vtk的也不完全一樣,雖然思路是一致的。vtk的渲染效率應該不是很快,里面沒有集成八叉樹等場景管理的算法,它的主要目的也不是渲染,而是算法。
????????而且它的架構也是一種管道流的方法,輸入數據經過一系列的算法處理后,最終形成點,線,面,存入vtkPolyData里面,然后在屏幕上繪制出來。
????????使用vtk主要有兩種方法,第一種就是參考它的算法,直接抽也來,用自己的數據結構實現,這種方法方法可以脫離vtk, 直接加入到自己的軟件里面,缺點就是提出麻煩,需要對vtk比較熟悉
????????第二種方法就是用vtk的數據結構,算法部分直接用vtk的庫,然后最終的點線面數據從vktPolyData提取出來,用自己的代碼繪制。缺點就是如果只用某種算法,比如它的等值線算法的話,也需要引用它的好幾個庫,顯得太臃腫,優點是不用提取算法,而且可以直接的使用它提供的多種算法,本人兩種方法都用過。
????????osg是一種場景圖的方法,每個opengl相關的函數都是一個節點, 適合用仿真,里面集成的很多算法,比如多相機,多視圖,粒子系統,各種回調函數,求交等都比較合適仿真,而且它只支持opengl, 擴展起來很方便,里面還集成了幾種漫游器,如果要寫自己的漫游器,也可以參考。如果初學者要學習圖形學的話,推薦學習osg,網上也有很多的資料和教程,而且它有多線程的實現模型。
????????ogre用于游戲多些,而且支持d3d, 由于要同時實現opengl和d3d,所以相對OSG來說,它比較難以擴展,但是它的一些插件式的架構設計相當不錯,如果想進入游戲行業,同時想學習了解引擎架構的話,推薦學習ogre,感覺ogre有點過度設計了,反而難以擴展,而且里面也沒有集成好用的漫游器。它的粒子系統,場景管理都是插件式的,可以利用它來學習插件式的程序設計。
其他關于 vtk 與osg
在VTK之上開發的Paraview成為開源軟件和很多公司的可視化工具。尤其在醫療三維可視化方面,基本上算是首選開發工具。采用VTK和Paraview為可視化開發工具比較出名的有OpenFOAM,Salome,StressCheck,Cubit等。
Vtk,(visualization toolkit)是一個開源的免費軟件系統,主要用于三維計算機圖形學、圖像處理和可視化。Vtk是在面向對象原理的基礎上設計和實現的,它的內核是用C++構建的,包含有大約250,000行代碼,2000多個類,還包含有幾個轉換界面,因此也可以自由的通過Java,Tcl/Tk和Python各種語言使用vtk
VTK以用戶使用的方便性和靈活性為主要原則,具有如下的特點:
1) 具有強大的三維圖形功能。Visualization Toolkit 既支持基于體素Voxel-basedrendering 的體繪制Volume Rendering又保留了傳統的面繪制,從而在極大的改善可視化效果的同時又可以充分利用現有的圖形庫和圖形硬件
2) Visualization Toolkit 的體系結構使其具有非常好的流streaming和高速緩存caching 的能力,在處理大量的數據時不必考慮內存資源的限制
3) Visualization Toolkit 能夠更好的支持基于網絡的工具比如Java 和VRML 隨著Web 和Internet 技術的發展VisualizationToolkit 有著很好的發展前景
4) 能夠支持多種著色如OpenGL 等
5) Visualization Toolkit 具有設備無關性使其代碼具有良好的可移植性
6) Visualization Toolkit 中定義了許多宏,這些宏極大的簡化了編程工作并且加強了一致的對象行為
7) Visualization Toolkit 具有更豐富的數據類型,支持對多種數據類型進行處理
8) 既可以工作于Windows 操作系統又可以工作于Unix 操作系統極大的方便了用戶。