標籤:

OpenGL 與 OpenGL ES2 之間有何區別?

最近在學習opengl es2,在windows建的開發環境,網上一搜索,各種例子,但是都是opengl的各種新老版本,有的API根本就沒有了,搞的我雲里霧裡,官方的reference里就幾句英文注釋,很難搞清楚api的用法;請高手介紹下最新的書或者教程,比較靠譜的。


GL是一個非常大的API集合,既有老的特性,也有廠商特定的API,也有新的API。

規模一大,驅動的質量就不好控制了,用戶用起來也不方便。實現一個功能要寫十行代碼來檢測這個功能能不能其作用。

所以Khronos接手後, 就考慮把GL那些邊邊角角的API統統都幹掉,只保留最常用、最必要的那些API,同時也是為了匹配移動晶元的特性,就誕生了OpenGL ES。

所以基本上GL ES算是GL的子集(當然區別也有不少),如果你想學OpenGL ES,你可以考慮從OpenGL Programming Guide或者是從OpenGL Bible入手(當然要最新版的,同時這兩本書也基本上只介紹了比較核心的API),然後再輔以一兩本ES的圖書即可。


同意 @空明流轉 的答案。

補充一下,OpenGL始發於1992年,距今22年。那個時候的許多API已不適合這20多年來的硬體發展。但由於OpenGL是向前兼容的,新的版本仍要提供舊的API,令使用舊版本的軟體能正常運作,所以會隨硬體的變化不斷化加入各種新API。

而且,曾經有一段長時間,OpenGL的發展停滯不前,許多硬體的新功能沒有對應的正式API,各顯卡廠商加入了各種extension。為了使用這些功能,OpenGL實際上失去了一些跨平台的意義,軟體開發者也要面對複雜的環境,甚至為不同硬體使用不同的API。

OpenGL ES像是OpenGL的一次重生,盡量把冗餘的API去掉,剩下最核心有用的部分。對於有經驗的程序員,甚至只需看這4頁 http://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf 便能基本使用 OpenGL ES 2.0。

微軟在移動平台的失利,可能也是令OpenGL ES在移動平台獨大的主因。這對於開發著來說或是一個幸運。

OpenGL ES的書比較有限,除了 @空明流轉提到的紅書,較近期的 OpenGL Insights (豆瓣) 也有專門談及 ES 的部分。


補充一本

OpenGL ES 3.0 Programming Guide (2nd Edition),我認為這是有史以來所有 OpenGL 書籍中最棒的,沒有之一。(小聲地說,網上有電子版)

OpenGL ES 3.0 Programming Guide (2nd Edition): Dan Ginsburg, Budirijanto Purnomo, Dave Shreiner, Aaftab Munshi: 9780321933881: Amazon.com: Books


各階段對應的APIGraphics Pipeline(詳細)各個chapter總結Graphics Pipeline

開源圖表,基於OpenGL ES 2.0的歡迎編輯和維護,也可以clone。


opengl是各個平台的統稱,移動端的是opengles,web端的是webgl。

移動端的opengles1.0,1.1,2.0這三個版本居多。

1.0的渲染介面是頂點數組(va)glVertexPointer這類,glbeginglend之流以及顯示列表這些都丟棄了。。

1.1的增加了vbo,fbo等,只不過介面上都需要加OES後綴之類的。可以說現在市面上所有的手機都支持1.1的,尤其安卓平台。

2.0的變化是強制採用shader,跟1.1完全不兼容了。矩陣變化相關的都需要開發者自己維護了,vbo替換頂點數組,最終渲染主要處理的是programe和texture的狀態管理。

app從1.1到2.0,有一次推到全部重來的理由。


後者是前者的子集


關係是 「opengl es是opengl的subset」, 沒有glu, glut庫。 針對手機做了優化等


推薦閱讀:

請問你用opengl/opengl es做過或者看到過的最酷的作品?
在手機上能否實現Forward+呢?還有其他比較適合手機的多光源演算法嗎?
在攝像機渲染時近大遠小的程度只受物體的深度影響?
OpenGL ES 依次渲染到不同紋理速度很慢?

TAG:OpenGL | OpenGLES |