1. 程式人生 > 實用技巧 >【入門】OpenGL基礎知識

【入門】OpenGL基礎知識

目錄

1. OpenGL體系

OpenGL函式庫相關的API有核心庫(gl),實用庫(glu),輔助庫(aux)、實用工具庫(glut),視窗庫(glx、agl、wgl)和擴充套件函式庫等。

gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函式。glut是為跨平臺的OpenGL程式的工具包,比aux功能強大(aux很大程度上已經被glut庫取代)。擴充套件函式庫是硬體廠商為實現硬體更新利用OpenGL的擴充套件機制開發的函式。

  • OpenGL的競爭對手是 Direct3D
  • OpenGL對應的開源實現是 mesa 3D

1.1. gult

gult, OpenGL Utility Toolkit, OpenGL工具庫。

這部分函式以glut開頭,主要包括視窗操作函式,視窗初始化、視窗大小、視窗位置等函式;回撥函式:響應重新整理訊息、鍵盤訊息、滑鼠訊息、定時器函式等;建立複雜的三維物體;選單函式;程式執行函式。

  • gult對應的開源實現是freegult。

1.2. GLX, 視窗庫

對於X視窗系統,它所使用的的OpenGL擴充套件(GLX:OpenGL extension for X.)是作為OpenGL的一個附件提供的,所有的GLX函式都使用字首glX。

  • apl、wgl分別用於apple、windows。

1.3. glew

GLUT或者FREEGLUT主要是1.0的基本函式功能;GLEW是使用OPENGL2.0之後的一個工具函式。

不同的顯示卡公司,也會發布一些只有自家顯示卡才支援的擴充套件函式,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴充套件庫,你就再也不用為找不到函式的介面而煩惱,因為GLEW能自動識別你的平臺所支援的全部OpenGL高階擴充套件函式。也就是說,只要包含一個glew.h標頭檔案,你就能使用gl,glu,glext,wgl,glx的全部函式。

1.4. glfw

GLFW無愧於其號稱的lightweight的OpenGL框架,的確是除了跨平臺必要做的事情都沒有做,所以一個頭檔案,很少量的API,就完成了任務。GLFW的開發目的是用於替代glut的,從程式碼和功能上來看,我想它已經完全的完成了任務。

一個輕量級的,開源的,跨平臺的library。支援OpenGL及OpenGL ES,用來管理視窗,讀取輸入,處理事件等。因為OpenGL沒有視窗管理的功能,所以很多熱心的人寫了工具來支援這些功能,比如早期的glut,現在的freeglut等。那麼GLFW有何優勢呢?

  • glut太老了,最後一個版本還是90年代的。
  • freeglut完全相容glut,算是glut的代替品,功能齊全,但是bug太多。
  • GLFW應運而生。

2. 關於OpenGL的版本

使用nvidia獨立顯示卡時:

$ glxinfo |grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce 610M/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 390.141
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 390.141
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 390.141
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

使用Intel整合顯示卡時:

$ glxinfo |grep Open
Vendor: Intel Open Source Technology Center (0x8086)
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) HD Graphics 2000 (SNB GT1)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 20.0.4
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 20.0.4
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 20.0.4
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
```sh

## 3. 其他工具

### 3.1. glxinfo

```sh
sudo apt-get install mesa-utils

檢視 OpenGL 的詳細資訊:

glxinfo | grep OpenGL

3.2. glxgears:測試工具

您可以通過執行以下命令來獲取資訊:

DISPLAY=:0 glxgears -info | grep GL_VERSION

這呼應類似:

GL_VERSION    = 3.3.0 NVIDIA 340.93

如果沒有 DISPLAY=:0 問題,也請嘗試。該命令glxgears位於mesa-utils軟體包中,可以通過以下方式安裝:

sudo apt-get install mesa-utils