OpenGL render tips的這個題目也比較大,而且具體講那些內容,我還沒有完全確定下來,我先講一個比較小的題目。
關於這個題目的具體內容我也想了很久,我想介紹一些大家經常用到的內容。l Glul Glauxl Glutl OpenGL extension Toolkitsl GL2PSl GLtracel Industry develop Toolkits
1 glu目前的版本是glu1.3,(http://www.geocities.com/vmelkon/glu.html)我想這方面的內容和參考手冊大家一定背得比我還熟。我就多嘴幾句。Glu是調用OpenGL API實現的,我們可以使用VC++6.0的Depends得到驗證。我們可以認為它是OpenGL的一個協助工具輔助包。Glu的基本函數功能可以劃分為三個方面:(1) Transform輔助函數gluOth2D, gluLookAt, glProject,gluUnProject,glPickMatrix,gluPerspective(2) Texture輔助函數自動Mipmap紋理產生或者紋理縮放為寬高為2^nglBuild1DMipMapsglBuild2DMipMapsgluScaleImage(3) 進階OpenGL幾何圖元產生l Sphere,Cylinder等l 手繪多邊形(無論凸多邊形、或者凹多邊形)三角形剖分;l Nurbs曲線和曲面;Bezier曲線,曲面的定義在OpenGL中已經實現,glMap*。
2 glaux這是微軟開發的,支援OpenGL初始化工作,視窗管理,訊息處理等工作的一個開發包。根據我的程式跟蹤和使用,發現這個開發包包含了大量的錯誤,many bugs,而且能夠引起嚴重的記憶體流失(memory leak)。
Advice
:儘可能避免使用這個開發包。
3 glut3.7.6(http://www.xmission.com/~nate/glut.html)它是一個跨跨平台windows/Linux/unix/mac的OpenGL輔助開發包,它主要完成的任務有:l 視窗建立與刪除;l 視窗訊息的處理;l 鍵盤滑鼠訊息回呼函數;l OpenGL context的自動管理;l 全螢幕程式支援;l 一致的彈出式菜單支援;
http://www.opengl.org/developers/documentation/glut/index.html
Advice
:它非常適合演算法研究。
4 OpenGL extension Toolkits4.1 SGI’s ogl SDKopengl 1.2以上版本 請用opengl 擴充庫, 我用的是 glew , http://glew.sourceforge.net/關於OpenGL extension SDK,可以說它一個官方的SDKhttp://oss.sgi.com/projects/ogl-sample/sdk.html 42 glux 關於另外一個OpenGL extension SDKhttp://w3imagis.imag.fr/Membres/Sylvain.Lefebvre/glux/ 模仿glut寫的,如果和glut配合使用,可以獲得比較一致的程式設計風格。4.3 CSGL:
C# graphics library基於C#的一個OpenGL開發包,可以在C#中調用OpenGL1.4。csgl.sourceforge.net/4.4 OpenGL extension Detection Software(similar to DXCaps) 關於OpenGL extension Support檢查軟體: www.realtech-vr.com/glview/
5 GL2PS我們在閱讀圖形學相關的PDF檔案的時候,我們通常會發現一些檔案中的插圖比較奇怪,當我們拖動頁面的捲軸的時候,它們不斷地重新整理自己,這表明這些插圖是向量的
EPS圖形。同時我們似乎覺得它們應該是OpenGL的輸出結果。我們的直覺是對的,它們是OpenGL程式輸出的EPS檔案!如果有了這個開發包,我想我們可以不再使用螢幕的方式產生的paper插圖了。 OpenGL程式輸出向量的eps或者ps檔案程式庫的官方網站:http://www.geuz.org/gl2ps/
6 GLtrace這是OpenGL開發庫中最有名的開發包之一。它是一個OpenGL的Hook DLL。它能夠截獲OpenGL 1.3的所有函數調用。假設你知道一個應用程式是使用OpenGL1.3寫的,但是你沒有它的原始碼,那麼GLtrace能夠記錄所有的OpenGL API調用,那麼你就可以知道這個OpenGL程式是如何?的。它相當一個Hack程式。它的可以完成的工作如下:(1) 截獲一個OpenGL程式調用的所有OpenGL API序列;(2) 分析一個OpenGL程式的實現演算法;(3) 強制一個OpenGL程式使用Front Buffer繪製,對於跟蹤一個.exe應用程式非常有效;(4) 對於一個OpenGL程式,修改GLtrace後,下載一個應用程式的紋理資料,或者說叫竊取,特別是一些Game或者BenchMark;(5) 修改GLtrace後,竊取一個應用程式的圖中繼資料,或者網格;(6) 對一個程式作效能最佳化測試和分析,例如經典的Quake III,Profile或者performance tuning; 至於如何使用這個工具,需要大家開動聰明的大腦袋。這裡我告訴大家它的官方網站,不過這個工具有多個明顯的BUG,希望大家在使用的過程中能夠把它修訂,我就不告訴大家是那幾個具體的問題了。大家可以學習原始碼的時候思考一下。http://www.hawksoft.com/gltrace/
Advice:
推薦等級 *****
7 Industry Development Toolkits 下面主要介紹工業界的大型或者Open Source,能夠實現強大功能和情境組織,輸入裝置管理的工具包: 我簡單列舉一下,大家可以到相關網站下載。SGI OpenGL inventor:http://oss.sgi.com/projects/inventor/ SGI OpenGL performer:http://www.sgi.com/software/performer/Kitware VTKhttp://public.kitware.com/VTK/Open ML: 我感覺它完全是模仿DirectX SDK體繫結構的一個東西。大家有興趣可以研究一下。http://www.khronos.org/openml/ OpenGVS: Quantum3D 的一個大型模擬系統軟體包http://www.opengvs.com/ OpenSceneGraph:
open source high peformance 3D graphics toolkithttp://openscenegraph.sourceforge.net/ OpenSG:一個Open Source 的基於對象的Scene Graphhttp://www.opensg.org/ VR Juggler: a good VR open source toolkit.www.vrjuggler.org/
8 Game Development Library8.1 Quake III/IV8.2 Doom II/III這兩個是最有名的,但是它們沒有公開。
opengl 1.2以上版本 請用opengl 擴充庫, 我用的是 glew , 這裡下載http://glew.sourceforge.net/ 最新 1.5.1