標籤:

學習 OpenGL 用哪個版本好?

熟悉C++,MFC,GDI,但是不熟悉圖形,現在學OpenGL,網上都推薦OpenGL編程指南和OpenGL超級寶典兩本書,還說超級寶典翻譯的不好,那我應該買哪個?買第幾版的?


不同意@邱曉峰入門用NEHE的建議。雖然十分經典,但經典也意味著老舊,全是固定管線內容,且不成體系。如果需要和一些固定管線的老代碼打交道,那NEHE還是值得一看的。

同意@倪朝浩,至少從GL 2.0看起(目前已經4.3了)。一定得熟悉VAO/VBO/FBO等等。我曾耗費很多時間學固定管線,但學了shader後才感覺走上了正道,才是真正地零距離接觸到了pipeline。當你去自己生成MVP、自己實現Phong Shading時,和簡單的用一下glTranslatef, glLightfv這些API的感覺是不一樣的。關於用什麼書,我以前回答過這個問題初學者學習opengl是用紅寶書好還是藍寶書好?。另外網上教程也有蠻多,我所知比較好的有(歡迎補充)

  1. opengl-tutorial.org OpenGL 3.3+ Tutorial[我正在翻譯這個教程,斷斷續續做了一年多。你可以通過切換語言看到我最初的翻譯。後來我們還在做修訂。可恥地做個廣告https://github.com/cybercser/OpenGL_3_3_Tutorial_Translation]

  2. OpenGL Step by Step

  3. Lighthouse3d.com

  4. Home – Swiftless Tutorials

  5. OpenGL 3.3 - Tutorials

  6. http://tomdalling.com/blog/category/modern-opengl/

  7. http://open.gl/

關於OpenGL ES/WebGL我知道的挺少,歡迎補充。

補充(2014年2月16日10:11:42):如果想在Mac上學OpenGL,這個Apple官方網站真心很不錯OpenGL for OS X,這個頁面上有個視頻講解怎樣從固定管線遷移到Shader,講的很好。

修改時間 2014年3月26日21:24:53

OpenGL藍寶書已有第六版,紅寶書有第八版,均完全剔除固定管線內容,全面介紹shading language。

修改時間 2016年2月3日20:23:27

補充一個目前看來最好的教程網站 http://www.learnopengl.com/


什麼版本都不用管 先實現一遍底層的光柵化的3D渲染演算法,只用一個畫像素的功能,把插值,zbuffer,alpha,陰影,三角形的光柵化,全自己底層實現一遍,之後進階挑nvidia 的sdk里的例子逐句看,siggraph早期的gpgpu的論文挑自己覺得有趣的去實現,shaderX,gpu gems裡頭拿感興趣的實現,我就是這麼過來的,後來去了皮克斯做RD,現在在Weta Digital做RD


題主如果不懂圖形學的話,無論決定買哪本書,裂牆建議先把圖形學的一些基本原理給搞明白。其中個人,以及所有我認識的搞圖形學的人一致認為十分重要、強調一萬分都不為過的兩個知識點是:

1、OpenGL渲染管線!!!!!!

2、物體-世界-相機-裁剪-視口 坐標變換!!!!!!

畢竟OpenGL只是個API,是工具,把原理搞明白了,理解了,工具上手會快很多。即便你將來想轉DirectX也就是換個API,換湯不換藥,大致思想是一致的。

另外要看書的話,紅寶和藍寶書早期版本以固定管線為例講解的就可以不要看了,直接從shader搞起吧。


看了幾個答案,再加上自己看的資料,綜合下,覺得這些資源不錯:

(備註:特指 modern opengl 的學習,即 opengl 3.0 以上, 和 可編程渲染流水線)。

(1)OpenGL 3.3+ Tutorials

gamedev 上 Michal Bubnar
寫的引導教程,非常不錯。

和它所在的:gamedev 的 opengl 專欄:

OpenGL - Articles

(2)前面有人推薦和翻譯的:

opengl-tutorial.org

不過課程較少。但是對一些科普性內容寫的不錯。

(3)另一個問題下有人推薦的:

Learning Modern 3D Graphics Programming

Jason L. McKesson

----

個人覺得,必須需要學習的一些基礎知識包括:

(1)model,view,projection 變換;

(2)和幾何變換對應的矩陣和向量的運算。cross,dot 等。

(3)渲染 pipeline 的流程,各個階段的職責工作。

(4)depth 緩衝。


無論OpenGL還是DX還是最新的Vulkan,都只是API,是個工具,核心的是要學習計算機圖形學理論知識,理論基礎有了再學習工具就得心應手了,否則處處碰壁。

我這裡從去年開始在翻譯一個英國人GLDev寫的opengl教程,感覺是線上最通俗易懂的系列了,循序漸進,有代碼詳解和源碼demo,一步步跟著來可以很快入門,及時不看源碼不寫代碼光看文章也可以入門圖形學的知識,有了理論基礎之後再學編程就容易多了,當然還是建議理論實踐相結合。去年和作者商量後開始翻譯的,它的官網剛加的中文版鏈接就是我翻譯的版本,因為我也是程序員所以會按照自己學習的思維去翻譯,應該容易懂一些,目前翻譯了一半,會持續更新,作者也在保持更新完善,有問題可以直接去他主頁留言請教,地址:專欄:一步步學OpenGL3.3+ - 博客頻道 - CSDN.NET每一篇都有原文鏈接,OpenGL是塊硬骨頭,歡迎學習交流,加油!

另外本人精力和能力有限,如果有相關背景的人願意幫我完成後半部分的翻譯分享給大家的朋友,將替作者表示感激!


大學的時候我用了四年的OpenGL,畢業後我用DirectX10,然後回過頭來看看OpenGL新版本的架構,覺得是在跟DirectX差了一代,OpenGL只能跟D3D8或者9的時候進行類比。

看一下題主用的顯然是Windows,那應該義不容辭的使用DirectX10。D9也不要用了,架構跟OpenGL一樣落後,是不能學到靠譜的東西的。


不要看中文書,裡面基本只有固定管線的內容..

起碼從2.0開始學起.


@vczh 我記得DX10有兼容性問題吧……

建議直接上DX11。DX10開始的可編程管線(好吧OGL也有),誰用誰爽。新的介面也清晰很多。

入門可以看看這本書《Beginning DirectX 11 Game Programming》不過如果我沒記錯的話,應該有一部分代碼有有錯的(我猜他們直接從10那本複製代碼了 笑)。

不大確定這本書有沒有中文的,不過這本書已經簡單到可以直接看懂了吧。。絕對是入門級的書……話說各種&抄襲&XNA的即使感……好吧這句純吐槽&>&<。

各種意義上不建議買實體的,弄個pdf會更方便一些。

至於OpenGL這倒霉玩意……反人類的設計,反人類的手冊,反正我是被噁心了個不行……(架構上我沒有深入了解……反正某些設計把我噁心個不行之後我就放棄這玩意了)如果一定要,我覺得弄個紅包書 + opengl的函數手冊應該就能看懂了。


可以嘗試下跟著這位github上的仁兄的commit做一個c++版本的Minecraft;

標題是《一個禮拜寫完Minecraft》,實際上一個禮拜把地面的雛形才剛剛完成;

同款差不多的還有一個方塊引擎也開源,而且星數很高。

到目前為止,水面的功能和人物行走才勉強完成,物理事件僅僅開了個頭。

設計上架構合理,數驅到位。最重要的是僅僅是最簡單的雛形,commit也不多,這樣便於學習。

Hopson97/MineCraft-One-Week-Challenge

效能上要優化的內容還有很多,但從學習的角度來看有很好的價值,況且邊學邊做東西玩更容易堅持下去,也容易記在心裡。

順帶提一句這位小伙今年20歲。


推薦閱讀:

c/c++視頻教程哪個比較好? 能學下去的?
做遊戲與搞圖形學有什麼聯繫?
C++ 的無鎖數據結構在工業界有真正的應用嗎?
既然 C++ 是 C 的超集,為什麼還是有不少人認為 C++ 不如 C?

TAG:OpenGL | C |