1. 程式人生 > >簡單的OpenGL程式

簡單的OpenGL程式

前言:
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還包含了一些函式,用於建立一些更為複雜的三維物體,例如球體,圓環面,茶壺,十二面體,圓錐體。
以下是一些小的子集供參考:

  • 視窗函式
    1. glutInit( )
    2. glutInitDisplayMode( )
    3. glutInitWindowPosition()
  • 顯示回撥函式
    1. glutDisplayFunc( )
  • 執行程式
    1. glutMainLoop( ):啟動程式。所有已經建立的視窗將會在這時顯示,對這些視窗的渲染也開始生效。

main函式

main函式一般由建立OpenGL系統的操作組成。有兩種實現方法。

  • 第一:通過GLUT建立並設定用於顯示的系統視窗。
  • 第二:通過定義回撥函式,建立事件處理系統。回撥函式是事件發生時使用的,並初始化模型與顯示環境。(回撥函式:就是通過一個函式指標來呼叫的函式,把函式的指標作為引數傳遞給另一個函式,我們說這就是回撥函式。)
  • 回撥函式型別
    1. 初始化函式:doMyinit()
    2. 改變視窗回撥函式:reshape()
    3. 顯示回撥函式:display()
    4. 空閒回撥函式:idle()
  • display()函式十分重要,它用於建立所定義的模型顯示。

GLUT的事件驅動

GLUT完全通過事件來操作。對程式需要處理的每個事件,都需要在main()函式中定義相應的回撥函式。
回撥函式是當相關事件發生時,系統事件處理程式呼叫的函式。

主事件迴圈啟動後,改變視窗(reshape)事件生成視窗,顯示(display)事件呼叫自身的回撥函式在視窗中繪出初始影象。
如果其他事件也定義了相應的回撥函式,則當事件發生時,啟動相應回撥函式。
回撥函式允許使用者拖動視窗或改變視窗大小,當用戶對視窗進行操作時被呼叫。

空閒(idle)回撥函式在系統空閒時間重新計算影象,並在終端上顯示改變的影象。