[CS193P] 第十九堂課摘要及心得筆記

在最後一堂的課程當中,我們將簡略的學習OpenGL ES的一些概念,讓我們對iPhone平台上的3D遊戲開發多增加一些概念。還請大家多多指教!
評論
評論

在最後一堂的課程當中,我們將簡略的學習 OpenGL ES 的一些概念,讓我們對 iPhone 平台上的 3D 遊戲開發多增加一些概念。還請大家多多指教!

OpenGL 簡介

OpenGL 是一套跨語言、跨系統的軟體介面,藉由這些函式讓我們可以用同樣的語法操作不同的繪圖硬體,並產生 2D、3D 的圖像。而 OpenGL ES 就是專門設計給行動裝置使用的 OpenGL 版本,擁有 OpenGL 的許多功能,是一個子集合。

但要注意的是,許多現在通用的 OpenGL 書籍、函式庫,並不能直接在 OpenGL ES 上使用,必須多加注意。

而 OpenGL 是一個狀態機,會紀錄當下的環境狀態,像是繪圖的顏色等資訊,而直到我們呼叫函式改變。

像是以下這些函式變可以修改狀態:

glEnable(); glDisable(); glMatrixMode(); glBindFramebufferOES(); glViewport(); glVertexPointer(); glColorPointer(); glTranslatef();…

而根據不同的狀態,我們呼叫同樣的函式也可能會有不同的結果。像是以下這些繪圖函式:

glDrawArrays(); glDrawElements();…

便會依照前面所修改的狀態,進行對應的繪圖功能。

座標系統

要進行繪圖必然得先有定位的系統,才能與繪圖介面進行溝通。在 OpenGL 中便提供多種呈階層關係的座標系統,分別是:

  • Window Coordinates
  • Normalized Device Coordinates
  • Clip and Eye Coordinates
  • World Coordinates
  • Object Coordinates

Windows Coordinates 就是以螢幕的左上角的點為 (0,0),一直延伸到 iPhone 的右下角,也就是 (320, 480),與我們以前用 UIView 的座標系統相當類似,如下圖:

而 Normalized Device Coordinates 是將螢幕的正中央設定為 (0,0,0),做一個四邊體的 3D 空間,如下圖:

Eye Coordinates 則是以使用者的眼睛作為 (0,0,0),在螢幕後方投影出一個四邊體的 3D 空間,如下圖:

World Coordinates 便是用來描述場景的座標,我們通常會透過這個座標來描述物體和光源的位置。而 Object Coordinates 則是對每個不同的物件所使用的獨立座標系統。

基本上,這些座標系統可能對初次接觸的讀者來說有點複雜,有興趣的讀者可以上網參考相關網站,以便釐清觀念。

幾何繪圖

OpenGL ES 可以繪製三角形、線還有點,透過這幾個基本的元素,變可以讓我們畫出其他更複雜的 3D 立體物件。而在繪製的操作上,我們主要透過提供給 OpenGL 一系列儲存在陣列的頂點,讓其能夠沿著這些頂點繪製出我們所需要的圖形。

此外,我們也可以針對每個頂點設定 RGBA 的顏色,OpenGL 便會依照頂點的顏色填滿所繪製出來的三角形或是線。而這些顏色,也是透過陣列的方式傳遞。

傳遞進去的頂點順序也是值得注意的一部分,以下是幾種常用的圖形所規定的順序:

虛線的部份則是代表著正反面的差別,我們可以看到右手邊的 GL_TRIANGLES 的順序是逆時針的,其正面便會朝上。而右手邊、順時針的則是反面朝上。

在課程的影片中有示範如何透過 GL_TRIANGLE_STRIP 在 3D 空間中繪製四面體,有興趣的讀者還請務必參考。

材質貼圖

當我們順利完成 3D 模型的繪製,我們也會希望在這些 3D 物件上能夠有漂亮的外觀。我們可以透過使用材質貼圖來協助。這些材質其實就是儲存在記憶體中的 2D 影像圖檔,如下:

而我們只需要將繪圖的各個頂點,分別對應到材質上的 (u, v) 座標,OpenGL 就會幫我們完成貼圖。

然而,假使我們要繪製一個四面體,若是針對每一個面都要切換材質這樣會很沒有效率。因此,我們可以設計一個大張的材質,讓每一面都可以透過同一材質進行貼圖。

在課程影片中,同樣有對於貼圖進行示範,有興趣的讀者還請參考。

其他細節

OpenGL ES 目前有兩種版本,分別是 1.1 和 2.0 版。在 iPhone 3GS 以前,所有的裝置均只支援 1.1 版。而本次課程的內容也均為 1.1 版的內容。

由於 OpenGL ES 2.0 做了相當大的改變,以使用 shader 為主,提供了更多的彈性卻也更難上手。若只是要設計一般的 3D 遊戲,那其實只需要使用 1.1 版就可以有很好的效果。

結論

這次的課程內容雖然只涵蓋到了 OpenGL ES 中的很小部份,但卻讓我們對於 iPhone 上的 3D 繪圖有了基本的認識。本連載在此畫下了句點,以後筆者仍然會繼續在 Inside 團隊中撰寫、分享 iPhone 平台的開發心得,還請大家繼續支持!

參考資源


Google Cloud Next Recap: Taiwan 精華篇上線!11/10 多支中文精選影音一次看

為了讓台灣市場更深入獲得第一手的 Google Cloud Next '21 產品與技術發表,Google 台灣擷取適合台灣市場的主題內容,推出 31 支的中文影音內容,探討各種 Google Cloud 相關主題,並進一步帶來啟發。
評論
評論

一年一度的 Google Cloud Next 盛會以往都是實體舉行,自去年(2020)受疫情影響後轉為線上舉辦,且開放全球使用者免費報名參加。為了讓台灣市場更深入獲得第一手的 Google Cloud Next '21 產品與技術發表,Google 台灣今年也持續自 Google Cloud Next '21 線上發表中,擷取適合台灣市場的主題內容,將在 11 月 10 日 推出 15 支精彩的重點摘要、精選 16 支主題影片添加中文字幕,共計 31 支的中文影音內容,帶來最新的 Google Cloud 雲端技術發展,並期待替市場帶來啟發。

立即報名觀看 Google Cloud Next 精選中文影音內容

Google Cloud Next 雲端盛會為企業帶來的好處

在本次 Google Cloud Next 會中發表了一系列的創新技術,這些新發表的技術無不是憑藉著業界最乾淨安全的 Google 雲端服務,支持各行各業解決眼前所面臨的急迫問題。尤其現在可以說是每一家公司都轉型成為了科技企業,但最終能獲得成功的企業,不只是要做出與資料儲存以及運算相關的基礎架構決策,還要能夠運用雲端技術來推動數位轉型,以徹底改變整間公司的工作模式與創新思維。因此,無論是要提升內部營運效率、增加業務成長,或是開發創新可能,在 Google Cloud Next 雲端大會中都有機會找到企業所需的答案。

Google Cloud Next 雲端盛會精華篇,五大主題一次掌握

在  Google Cloud Next 中跟著 Google 設計的學習歷程,逐步領略企業的數位轉型過程,以及未來可期的技術發展。本次的中文內容涵括五大主題,分別為:

  • 開放式基礎架構:為了協助企業能在不受任何地理環境的限制下,加速雲端部署的腳步,Google 發表了一系列的託管式硬軟體解決方案 Google Distributed Cloud,幫助建構不受任何地理環境限制的雲端環境。
  • 資料與分析:為了協助企業建立具備即時分析能力的新一代資料基礎架構,並支援處理重要業務資料的應用程式,Google 也發佈了整合度最高、資料分析最完善的 AI 解決方案。
  • Google Workspace:透過建立一個數位工作場所,為超過三十億名使用者提供不受地理環境限制的交流和協作服務,完善所有業務環節間的協同合作,就是 Google Workspace 的使命。會中將透過 Smart Canvas 等輔助工具,提升使用者的工作效率,並進一步提供橫跨於 Docs、Gmail、Meet 和 Chat 等產品中的無縫式用戶體驗,以滿足第一線使用者的不同需求。
  • 安全性:今時今日,各個產業的機構組織都面臨前所未見的資安難題。為了提供更多人安全的網路環境,Google 宣佈了兩項重要政策,分別是全新的 Google 網路安全行動團隊 (簡稱 G-CAT),以及全新的 Work Safer 計畫。
  • 永續發展:為了提供業界最乾淨的雲端環境,Google 也發表了幾項創新技術,協助企業因應氣候變遷,採取立即行動。例如:提供所有客戶免費使用 Carbon Footprint 碳足跡追蹤功能。

立即免費觀看 Google Cloud Next Recap: Taiwan!了解更多詳細精彩的 Google Cloud Next 雲端盛會精華