[學習心得] OpenGL 線上課程 - Review OpenGL Online Course

將 《Modern OpenGL C++ 3D Game Tutorial Series》這個 OpenGL 的線上課程完結了,比起預計所花的時間短了不少。 OpenGL 是個發展已久的 Graphics API,當遊戲光靠 CPU 已經無法負擔,需要透過 GPU 來 “硬體加速” 畫面處理的工作時,相對的溝通工作便可以用這類 API 來完成。 雖然還有其他 Graphics API,但我選擇了 OpenGL 作為入門,並碰巧遇上了這門線上課程的優惠。完成了課程後,在這邊記下一些心得,讓其他想接觸 OpenGL 或這門線上課程的人作為參考。

課程內容

一路下來這個課程可以學到:

  • Windows 與 Mac OSX 上 OpenGL 的開發環境架設
  • 建立 shader program 到 GPU 上
  • 傳遞 mesh 資料至 GPU 並透過 shader 繪製到畫面上
  • 將圖片、貼圖載入到 GPU 的 TEXTURE Unit 中使用
  • 位移、旋轉相關變形的實作
  • 虛擬攝影機、動態取景的實作
  • 傳遞相關資料並使用 shader 渲染光照效果
  • 利用第三方 library 讀取 model 檔案至程式中繪製
  • Skybox 簡單實作

不過這個課程並不會詳細解說每個項目背後的原理,包括每個使用到的 OpenGL API 的細節功能也不會清楚的解釋,基本上就是把課程內容分別舉例子實作一次,並提供給大家原始碼做為參考。 上述的每個項目都是在 3D 繪圖、遊戲製作的一些基本需求,透過這個課程可以理解如何用 OpenGL 達成這些需求。 但是因為沒有描述原理,所以沒有 3D 繪圖的一些觀念時,會在講者編輯程式碼與解說時產生疑惑,變成知其然而不知其所以然的窘境,甚至鴨子聽雷的情況。

個人建議的先備知識

事前如果有 3D 繪圖的一些觀念,或者有細究過遊戲繪圖,上起這門課程會容易些:

  • 3D Model 資料的組成:mesh、vertex、triangle、normal、uv 貼圖等關鍵字的意義
  • Render pipeline:應用階段、幾何階段等繪圖步驟之間會傳遞甚麼資料
  • vertex shader 與 fragment shader 的功用與基本認識

這門課是用 C++ 為使用語言,所以當然對 C++ 要有一定程度的了解,包括類別 (class)、指標 (pointer)、標頭檔 (header file) 如何在 C++ 中使用,而不是只有條件是跟迴圈的程度。 另外如果先擁有撰寫 shader 的基礎 (Unity shaderLab 等任何 shader 實作手段都行),那基本上就沒問題了,否則最低限度至少要先知道 vertex shader 與 fragment shader 的意義。

其他感想

就個人感覺來說,如果是要做為初學者的教學,這段線上課程所包含的內容有點貧乏。許多的原理跟 API 細節沒有解說,會在課程剛開始時感到疑惑,必須另外去找資料或文件確認 API 的功能。 但是因為網路上自學 OpenGL 的影片相當少見,就這點來說還是相當值得的。比起慢慢地閱讀文件或文章,自行做實驗來學習,實際操作的影片可以更好的引導進入狀況,配合自己在每個小節後查資料解惑,很快就能對 OpenGL 掌握到一定程度。 利用這門課當作敲門磚,我自覺算是很順利地進入 OpenGL 的世界,未來只要再補上更多原理細節即可。 可以來想想要做些甚麼作品來當作練習,檢查自己的理解了。