Introduction to OpenGL (1) 靜宜大學資工系 蔡奇偉 副教授 2001-2010
大綱 OpenGL 是什麼? 簡史 程式庫 命名規則 繪圖架構 主要參考資料
OpenGL 是什麼? OpenGL 是一套 2D/3D 的繪圖 API(Application Program Interface),其中包含了約 250 個函式。透過這些函式,我們可以利用繪圖卡的 2D/3D 硬體加速功能,免去 CPU 用於繪圖的負擔,因而提高系統整體的繪圖效率。 OpenGL 是一套跨平台的繪圖函式庫,因此使用 OpenGL 的繪圖程式具有高度的可攜性(即可以很容易地把程式移植到不同的電腦系統中)。 然而,OpenGL 並不包含處理視窗與人機介面的函式,這些功能得靠所使用的視窗系統來支援。
OpenGL 的簡史 1983 IRIS GL ships with SGI IRIS 1000 terminal 1987 SGI and Pixar consider joint API development 1991 OpenGL ARB created 1992 OpenGL 1.0 completed (June 30) 1995 OpenGL 1.1 released (vertex array, texture objects, new texenv modes) 1997 Fahrenheit agreement between SGI and Microsoft 1998 OpenGL 1.2 released (3D textures, separate specular, imaging) 1999 OpenGL 1.2.1 released (multi-texture) 2001 OpenGL 1.3 released (compressed texture, cube maps, multisample, dot3) 2002 OpenGL 1.4 (mip-map generation, shadows, point parameters) 2003 OpenGL 1.5 (vertex buffer objects, occlusion query) ARB extensions: OpenGL Shading language, ARB_vertex_program, ARB_fragment_program 2004 OpenGL 2.0
OpenGL 程式庫 opengl 核心程式庫 glu 此程式庫提供一些簡便的工具函式。 glut 提供跨平台的簡易 UI 函式,以便利撰寫 demo 程式。 glaux SGI 所提供用來簡化 demo 程式撰寫的程式庫,目前已經淘汰,你應改用 GLUT。 glx 此程式庫提供結合 OpenGL 和 X Window 系統所需的函式。 wgl 此程式庫提供結合 OpenGL 和 MS Windows 系統所需的函式。
命名規則 OpenGL 通常以 GL 或 gl 開頭 GLU 以 glu 開頭 GLUT 以 glut 開頭
OpenGL Software Rasterizer Application Program OS Services I/O Services GDI OpenGL Software Rasterizer Display Device GDI: Graphics Device Interface
OpenGL Hardware Rasterizer Application Program OS Services I/O Services GDI OpenGL Software Rasterizer Display Device Hardware Driver
OpenGL 資料處理流程
Vertex Data OpenGL 處理的幾何模型都是由 vertices 組合而成。 Pixel Data 圖片或紋理貼圖(texture)是由像素所組成。 Display List Vertices 或 pixels 資料可以存入 display list 中,供後續使用。 Evaluator 把 vertices 視為曲線或曲面的控制點,然後計算出真正位於曲線或曲面上的點。
Per-vertex Operations Primitive Assembly 執行剪裁(clipping)、投影、視埠轉換、深度值(depth)、截斷(culling)等計算。 Pixel Operations 像素經過 Scale, bias, mapping, clamping 等運算後,拷貝至 texture memory 或 frame buffer。 Texture Assembly 建立 texture 物件與其施行順序。Texture 物件可存在顯示卡的 texture memory 中,以加速 texture 的處理。
Rasterization 這個步驟把幾何資訊和像素資訊整合成 fragments。每一個 fragment 都對應至 frame buffer 中的相對像素,除了顏色外,也包含深度值資訊。 Per-fragment Operations 每一個 fragment 加上 texture 資料和雲霧效果設定,若通過 scissor test, alpha test, stencil test 和 depth-buffer test,則在施行 blending, dithering, logical operations, masking by a bitmask 等運算後,產生 frame buffer 中所對應的像素值。
主要參考資料 書籍: 網站: http://www.opengl.org OpenGL Programming Guide 4th Ed., Addison-Wesley 2003. OpenGL Reference Manual 3nd Ed., Addison-Wesley 1999. OpenGL Superbible 3nd Ed. 網站: http://www.opengl.org