心血來潮想學習使用OpenGL(很久以前就想要使用OpenGL來作2D繪圖了!),便上網隨手搜尋相關的教學。(雖然印象中有一個不錯的NeHe教學,但怕它已經過時了,所以..還是找一下囉)。很快的就找到了opengl-tutorial.org這個教學網站。和一般的教學不同的地方在於它所選用的GL utility library不同。NeHe的教學採用的是glut,而opengl-tutorial使用了glfw(主要), glew以及glm。此外,opengl-tutorial所教是比較新的OpenGL 3.3 core profile。
簡單的說,core profile和以前所使用的OpenGL的差異(OpenGL 3.3 的compatibility profile)在於fixed pipeline的存在與否。Fixed pipeline是glVertex, glVertexPointer, glColor, glTexCoord等所提供的繪圖動作,相對於我們利用shader(給GPU跑的程式)來定義的繪圖動作來說是沒有彈性的(故稱fixed pipeline)。
總之看完教學1~4之後,我決定動手做做看。
準備工作
該教學使用的軟體在Fedora (18)裡面的開發包(development package)名稱如下:
- OpenGL headers: mesa-libGL-devel
- glew: glew-devel
- glfw: glfw-devel
- glm: glm-devel
程式碼
程式碼放置在github上面:https://github.com/inorindesu/opengl_hello
Fedora 的 glfw和教學中使用的版本不同,所以造成了不少的困擾。Fedora採用了似乎還是beta版的glfw 3,而opengl-tutorial.org教學所使用的為glfw 2.x。不過,憑glfw3的header file以及我強大(?)的第六感(??)...將將!三角形出現了!而且是有漸層著色,而不是單調的單一顏色三角形喔!
OpenGL版本變遷
找到opengl-tutorial.org的時候,看到「Modern OpenGL」時還在想作者葫蘆裡賣什麼藥,「OpenGL不是就那些東西嗎?」。即使識讀完之後,我也還是這樣想:作者只是寫了OpenGL中另一個在其他人的教學中比較不常寫的部份而已。雖然令人高興,但不是說非常的符合「Modern OpenGL」的描述:作者用的這些function其實在舊版的OpenGL也有出現過的說,是什麼理由讓作者得以宣稱它所教的東西是比較新的呢?好吧,我承認glew和glfw的確是新的XD,但就OpenGL的部份來說...
不過在我深入的看了許多其他的文件之後才發現作者所謂的Modern OpenGL並不是說這些function只存在於OpenGL3而不存在於OpenGL2,而是作者在本文中沒有使用到會在未來被廢除的OpenGL function。說實話,看到許多熟悉的OpenGL function被貼上「即將被廢除」的標籤,讓我有一種說不上來的惆悵感。(我小時候也曾經夢想過要用OpenGL畫出很美的東西,只是看了好幾次教學都還是不懂XD)就像是一個老朋友要出國,而且似乎沒打算要回來了...
對於以後要用OpenGL來進行繪圖的人來說,這篇展望未來的教學應該會比NeHe的還要實用許多,並且寫得淺顯易懂,所以我個人相當的推薦!
補記
2013/3/1:這裡的內容包含了OpenGL3.0以及舊版OpenGL的差異,講得相當相當的清楚,歡迎參考!
沒有留言:
張貼留言