什麼類型的人需要學習 OpenGL?

在我比較狹窄的認知看來,如果要學習三維顯示,好像第一個想到的OpenGL(就好比想學習圖像處理,那首先想到的就是OpenCV了)。

不過學習OpenCV的必要性是不言而喻了,但是對於三維顯示而言,OpenGL好像也不是一個一家獨大的三維顯示工具(比如:Windows 支持 DirectX 和 OpenGL,為什麼大多數 PC 遊戲還是 DirectX 開發? - 遊戲開發下不少答案認為,OpenGL相比DirectX幾乎沒有什麼優勢)。

那對於Windows端「非「三維遊戲開發者(比如學生黨)而言,學習OpenGL有必要嗎?如果是想入門學習計算機圖形學(很多計算機圖形學的教程裡面都建議先學習OpenGL)?

有什麼好的意見或建議,歡迎大家留下自己的答案!


OpenCV和OpenGL雖然名字相似,但它們不是同一軟體層的東西。OpenGL是在驅動層之上提供跨平台的圖形API。

如果要求不高,可使用OpenGL實現跨平台的圖形渲染程序。但對性能或功能有更高要求,可能需要用平台(操作系統、硬體廠商)提供的專門API。

另外,OpenGL主要用於實時、互動式圖形渲染。計算機圖形也包括非實時的離線渲染,這方面可以完全用軟體實現,非必須使用OpenGL之類的圖形API。


OpenGL在學界比較流行。移動平台/WebGL/Linux上用得多。原理都是相通的,不用糾結太多。畢竟沒人禁止學了OpenGL以後不能學DX。

當然也可以完全不管什麼OpenGL和DX。你只需要有人提供給你僅此一個跟硬體有關係的函數:

DrawPoint(x,y,color)

其他按硬體渲染管線的功能用軟體實現。看起來笨笨的,其實是捷徑中的捷徑。

比如這本書:Computer Graphics: Principles and Practice (3rd Edition),可是既沒有用OpenGL也沒有用DX的哦,而是用了WPF。


Windows,Windows Phone,XBox:DirectX

OSX/IOS:Metal

SteamOS:Vulkan

PlayStation:不知道叫什麼,總之也不是OpenGL

Linux:OpenGL(但是你只有垃圾顯卡可以用,發揮不出實際效果)

綜上所述,這取決於你到底使用的是什麼平台。

===============================================

題外話,DirectX 12 改了驅動的架構,驅動變得更薄了,也就是說,A卡的用戶們調用到的AMD寫的驅動代碼更少了(都被微軟寫光了),在某個測試裡面A卡的性能因為這樣就直接提高了20倍。所以對於A卡用戶來說,更應該使用DirectX,因為使用OpenGL就意味著你們在大量的調用AMD寫的代碼,這將給性能帶來巨大的損耗。


按照你的描述,我認為沒有必要,不要學習。

想了解圖形學自己手動寫光柵化渲染器/光線追蹤渲染器。

@Milo Yip 說的對,OpenGL就是個不那麼好用的硬體介面,跟你想了解的圖形學的基本概念沒啥關係。直接學這些東西會導致你被一些具體的硬體細節迷惑而影響你對圖形學建立正確的認識。

圖形學不等於OpenGL。如果你看的教材認為應該先學習OpenGL,那都是bullshit。

既然是Windows, 真想做實時3D程序可以去用Dx,以後的日子好過些。但從學習圖形學的角度,你不需要掌握任何API。


樓上各位大牛都是噴OpenGL,我要為OpenGL正名。小弟用了10年多的GL,對GL感情比較深。曾在農企做過GL驅動開發,參與過extension的proposal,也在SIGGRAPH上做過OpenGL course。

@Milo Yip 說的對,OpenGL就是個不那麼好用的硬體介面,跟你想了解的圖形學的基本概念沒啥關係。直接學這些東西會導致你被一些具體的硬體細節迷惑而影響你對圖形學建立正確的認識。

這個說法有點片面。

1,如果OpenGL是一個不好用的硬體介面,那麼DX12和未來的Vulkan估計是一個更加不好用的硬體介面,更加讓人迷惑。用Vulkan寫一個畫一個三角形程序,需要600多行代碼。其中大多數都是硬體相關代碼,跟圖形學關係不大。

2. 在OpenGL中體現了太多圖形學基本概念,用三角面來表達形體,空間變換,texture mapping等等等。學好OpenGL,基本對現代圖形硬體和知識會有一個了解的。

如果要求不高,可使用OpenGL實現跨平台的圖形渲染程序。但對性能或功能有更高要求,可能需要用平台(操作系統、硬體廠商)提供的專門API。

很多人都噴OpenGL效率低下,我想問問為啥效率低下啦?如果用Core profile效率也沒有差到哪裡去啊。很多legacy的api不要使用,就不太會影響效率。GL的長處是保持將近20年的兼容性。就和intel x86一樣啦,要想效率高,軟體好好寫嘛,不見得大家罵現在intel效率差啊。所以學些OpenGL找對教材很重要,網上有很多modern OpenGL programming的教程,此外也可以看看農企GL老大Graham的http://www.slideshare.net/CassEveritt/approaching-zero-driver-overhead

OpenGL比DX的長處在於它的實驗性和開放性,每個廠商都可以提出自己的extension,挖掘最新的顯卡的特性和潛能。這些api不像DirectX一樣需要被微軟批准,所以你看很多paper都是用OpenGL來做實現,因為這樣才能利用到最新的硬體性能啊。希望Vulkan能保持這個機制。

也因為GL的開放性,硬體開發時候,前端驗證都是用GL API來寫測試。

總結,什麼樣的人需要學OpenGL呢,我覺得是希望開發最新的渲染特效,希望藉助硬體來實現最新的演算法,研究API和流水線結構的人,和將來有志於從事GPU架構設計的人。當然圖形學入門者也可以學啊,只是要找對教材就好。


這個問題里提到了兩點

  • Windows 端

  • 「非「三維遊戲開發者(比如學生黨)

對於這樣的目標用戶,強烈建議學習只 OpenGL,其他的 API 都沒必要學。

對於學生而言 OpenGL 是性價比最高的語言,不展開說明了。

你提到了 OpenCV,那麼也可以閱讀下這篇文章

OpenCV 為啥勾搭上 OpenGL? - 黑客與畫家 - 知乎專欄

OpenGL 的入門書籍推薦

http://www.amazon.com/OpenGL-3-0-Programming-Guide-Edition/dp/0321933885/ref=dp_ob_image_bk

利益相關:在 NVIDIA 做 OpenGL 工具……


如果學glsl自己寫shader,那對rendering的理解還是有不小幫助的。如果只是做應用,opengl偏底層不方便,用一些基於opengl提供高層api的庫比如open scene graph是很好的選擇。順便說一句osg也是一個很優秀的c++開源項目,可以從中學習如何用c++規範的構建大中型項目


OpenGL作為學習對象來說很不錯。

1.很多圖形學書籍用OpenGL來講解和描述。

2.獲取成本低。當然使用成本可能比較高。

理解了思想之後融會貫通舉一反三,自然學別的也不難。

再有,OpenGL在移動設備等非桌面領域的應用也很廣。沒必要糾結說桌面Linux份額什麼的。


如果你像我這樣,懶得學習好多種不同的API


對dx沒有研究,opengl還算熟悉。但就opengl和dx效率而言本人還是有發言權,工作需要在windows上做過opengl和dx11 native層的opengl es 的translator,在安兔兔3D場景渲染測試中,opengl 跑分在多數電腦上佔上風。

當然,不懂版本的驅動極大影響測試結果,大部分測試在intel集顯上比較。


沒有什麼是必要的,學習ogl也花不了多少時間


難道有數學教材要求你先學Matlab和Mathmatica?


學圖形學和學OpenGL是完全不同的概念,對於多數學圖形學的人來說,OpenGL只是工具,就像學數學的人學用計算器一樣(學視覺的人學OpenCV同理),不要把OpenGL之類的庫在圖形學中的分量看得太重。如果LZ真的想學圖形學,還是先去學數學吧


推薦閱讀:

想用C++實現一個軟體渲染器,類似DX和OpenGL,除了《3D遊戲編程大師技巧》,或者什麼網站推薦?
現階段應該怎麼學習計算機圖形學呢?
計算機圖形學是否已經進入瓶頸期?
為什麼高解析度屏幕在使用低解析度時無法做到點對點映射?
紋理坐標三角形內插值問題,我搞不定了。?

TAG:OpenGL | 計算機圖形學 | DirectX |