OpenGL 3.x教學: 前言:為何要學習OpenGL

這幾年下來 OpenGL 這套3D API越來越少人用, 取而代之的則是 Microsoft 的 Direct3D API。 不過 OpenGL 還是有些好處的 ,從幾個角度來看:

  1. OpenGL 硬體支援性:
    微軟將 DX10 與 DX11 限定在Windows Vista / Windows 7 上的平台, 使用者不更換作業系統就不能用。 不過相同的硬體功能例如 DX10 的 Geometry shader,DX 11 的tessellation 使用 OpenGL API 則仍然可以在舊有的 WinXP 上使用。 此外由於 OpenGL 提供擴充的使用 , 所以在 OpenGL下也可以使用到各家顯示晶片的最新功能。
  2. 跨平台
    OpenGL 本身是一套跨平台的 API, 所以在Windows / Linux / Mac BSD 上都可以使用。 並且由於手持裝置的發達, 手機上的 OpenGL ES 1.0 / ES 2.0 是基於OpenGL 1.5 / 3.x 的刪減修改版。 此外在正在發展中的 WebGL 也是根據 OpenGL ES 2.0 制訂中。 而OpenGL ES 2.0 的概念跟 OpenGL 3.x 是大同小異的, 所以未來的理想狀況是開發的3D程式能在Web, PC, 手持裝置上使用。

然而在整合性上而言,由於應用程式通常並不只有單純的繪圖,以網路遊戲而言, 除了繪圖, 還需要音效, 網路,影片播放, 鍵盤滑鼠搖桿等輸入裝置操作,而 OpenGL 只包含繪圖。 這點是使用 OpenGL 開發應用程式上比 Direct3D 不方便的部分。因為 Direc3D 上有 DirectX,把其他的需求都整合在一起。 不過現在也有其他的 API 在提供跨平台的功能下,可以用 OpenGL API 繪圖, 同時也整合音效,網路,影片播放,鍵盤滑鼠搖桿等輸入裝置。 例如: QT , SDL。算是彌補了這方面的缺點。

註1: OpenGL ES 1.0 是 OpenGL 1.5 的刪減版。
註2:目前 OpenGL 3.x 不完全涵蓋全部的 OpenGL ES 2.0 ,但是根據 khronos 未來的制訂方向是將未來的 OpenGL 制訂成 OpenGL ES 2.0 的 SuperSet。
註3:WebGL詳情請見: http://khronos.org/webgl/wiki/Main_Page (內有WebGL範例程式)

本文部分參考至 http://blog.wolfire.com/2010/01/Why-you-should-use-OpenGL-and-not-DirectX

3 thoughts on “OpenGL 3.x教學: 前言:為何要學習OpenGL”

  1. 請問,我在Vista上面播放大解析度的電影,會很慢。應該我目前的codes 在Vista上目前的程式無法用到顯示卡硬體的加速功能,如果要克服,可能需要用D3D或者OpenGL去Render。但是剛剛試了OpenGL,CPU資源還是佔很多50%以上,請問OpenGL是否有哪個API可以確保影片的render透過顯示卡硬體去執行? 我想要用OpenGL去展現最佳的效能給別人看。否則只能用D3D了。感謝。

  2. 依照這個用途,應該是需要使用OpenGL裡面的Pixel Buffer Object,將decode出來的Frame放到PBO裡,再做OGL 的render.至於decode的硬體加速方面,以nvidia來說有提供API可以使用,所以可以使用nvidia API作video decode加速,然後把decode的frame丟到OGL的PBO,再作顯示.而Nvidia的硬體video decode加速部分,還有另個選擇是換成用cuda, cuda allocate的記憶體可以直接轉成OGL的PBO.(前個做法不確定能否直接轉成PBO)

  3. 另外像pbo跟OGL render在實作上也有一些細節要注意,沒用對的話,也會造成效率不彰.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。