前一段時間面試前端崗位碰壁饼酿,決定靜下心來好好學習提升一下自己。最近入了OpenGL這個深坑,有很多想法想分享給大家故俐。還有一個寫這系列教程原因是目前高校的計算機圖形學課都用OpenGL做實驗想鹰,而網(wǎng)上的資源比較少(指早期OpenGL),所以也是給學弟學妹的踩坑經(jīng)歷分享??药版。
我對OpenGL的理解
OpenGL本質上是一個渲染圖形的API辑舷。它是跨平臺、跨語言的槽片,并且非常底層可以和GPU直接交流何缓。目前,OpenGL有四個大版本分為兩種編程方式—— 固定渲染管線 和 可編程渲染管線 編程方式还栓。同時碌廓,OpenGL又是一個規(guī)范,它由Khronos組織維護剩盒,具體實現(xiàn)則是由各個GPU生產(chǎn)商實現(xiàn)的谷婆。
早期OpenGL就是 固定渲染管線 的編程方式的,OpenGL1.0到4.0都支持勃刨。它主要以圖元的方式渲染制圖波材,這與微軟MFC的GDI很相似股淡,就是通過調用不同的函數(shù)畫不同的圖形身隐。而與之對應的現(xiàn)代OpenGL是 可編程渲染管線 的編程方式,它更接近底層的GPU渲染唯灵,用戶操作起來更自由但是更難上手贾铝。本篇教程兩者都有介紹。
我對OpenGL相關的理解
- GLUT/GLFW
GLUT就是OpenGL的具體API埠帕。由于OpenGL過于底層垢揩,我們不能對其直接操作,所以我們要借助GLUT中的函數(shù)來實現(xiàn)我們想要的具體功能敛瓷。但是GLUT本身并不是很完善叁巨,只能做一些簡單的,小規(guī)模的程序呐籽。而GLFW是GLUT的進化版锋勺,雖然實現(xiàn)的功能差不多,但是它更完善與OpenGL4.0更貼切狡蝶。
- GLEW
GLEW是OpenGL的擴展庫庶橱,它是基于C/C++開發(fā)的。當我們需要最新的OpenGL功能時就需要調用這個庫內的函數(shù)實現(xiàn)贪惹。此外苏章,它還包括WGL、GLX的擴展功能。
- GLM
GLM是OpenGL的數(shù)學庫枫绅,是用來做圖形的變換的(例如旋轉泉孩、平移和斜切等)。很多時候它就是一個頭文件并淋,只要在項目中加載就可以了棵譬。
- GLSL
GLSL是一種對著色器操作的語言,有點類似C語言预伺,它包含一些針對向量和矩陣操作的有用特性订咸。這在現(xiàn)代OpenGL中經(jīng)常用到。
接下來就是入手OpenGL了酬诀,我打算先從早期OpenGL入手脏嚷。