簡單的OpenGL程式
阿新 • • 發佈:2018-11-29
前言:
GL:OpenGL庫
GLU:OpenGL工具函式庫
GLUT:OpenGL使用工具庫
GL
OpenGL是一個狀態機,尤其是如果你使用固定功能的線管。每個狀態變數都有一個預設值。在任何時候都可以向系統查詢每個狀態變數的當前值:
- glGetBooleanv()
- glGetDoublev()
- glGetIntegerv()
- glGetfloatv()
- glGetpointerv()
- glIsEnabled()
GLU
包含了一些函式,它們利用底層的OpenGL函式來執行一些特定的任務,例如設定特定的矩陣,多邊分格化以及表面渲染等
GLUT
GLUT(英文全寫:OpenGL Utility Toolkit)是一個處理OpenGL程式的工具庫,負責處理和底層作業系統的呼叫以及I/O
OpenGl實用工具庫是一個獨立於視窗系統工具的工具包,它的目的是隱藏不同視窗API所帶來的複雜性OpenGL包含了很多的渲染函式,但是它們的設計目的是獨立於任何視窗系統或作業系統。因此它們沒有包含開啟視窗或者從鍵盤滑鼠讀取事件的函式。但是絕大多數需要使用者的互動。因此,使用GLUT來簡化開啟視窗,檢測輸入等任務。
GLUT還包含了一些函式,用於建立一些更為複雜的三維物體,例如球體,圓環面,茶壺,十二面體,圓錐體。
以下是一些小的子集供參考:
- 視窗函式
- glutInit( )
- glutInitDisplayMode( )
- glutInitWindowPosition()
- …
- 顯示回撥函式
- glutDisplayFunc( )
- 執行程式
- glutMainLoop( ):啟動程式。所有已經建立的視窗將會在這時顯示,對這些視窗的渲染也開始生效。
main函式
main函式一般由建立OpenGL系統的操作組成。有兩種實現方法。
- 第一:通過GLUT建立並設定用於顯示的系統視窗。
- 第二:通過定義回撥函式,建立事件處理系統。回撥函式是事件發生時使用的,並初始化模型與顯示環境。(回撥函式:就是通過一個函式指標來呼叫的函式,把函式的指標作為引數傳遞給另一個函式,我們說這就是回撥函式。)
- 回撥函式型別
- 初始化函式:doMyinit()
- 改變視窗回撥函式:reshape()
- 顯示回撥函式:display()
- 空閒回撥函式:idle()
- display()函式十分重要,它用於建立所定義的模型顯示。
GLUT的事件驅動
GLUT完全通過事件來操作。對程式需要處理的每個事件,都需要在main()函式中定義相應的回撥函式。
回撥函式是當相關事件發生時,系統事件處理程式呼叫的函式。
主事件迴圈啟動後,改變視窗(reshape)事件生成視窗,顯示(display)事件呼叫自身的回撥函式在視窗中繪出初始影象。
如果其他事件也定義了相應的回撥函式,則當事件發生時,啟動相應回撥函式。
回撥函式允許使用者拖動視窗或改變視窗大小,當用戶對視窗進行操作時被呼叫。
空閒(idle)回撥函式在系統空閒時間重新計算影象,並在終端上顯示改變的影象。