跳轉到內容

跨平臺遊戲程式設計:使用 gameplay3d/材質詳解

來自華夏公益教科書,自由的教科書

材質、技術、流程和效果

[編輯 | 編輯原始碼]

如你所知,gameplay3d 中的 模型網格 的一個具體例項,而網格由一個或多個 網格部件 組成。

為了在 gameplay3d 中渲染 模型,該 模型 中的每個 網格部件 都必須關聯一個 材質。由於每個 網格部件 可以擁有不同的 材質,因此 模型 的不同部分可以以不同的方式進行渲染。例如,如果你有一個穿著盔甲的角色,你可以將金屬材質應用於盔甲,而將簡單的紋理應用於 模型 的其餘部分。

一個 材質 包含一個或多個 技術。使用 技術 的目的是在執行時輕鬆切換渲染技術,而無需在 網格部件 上設定完全新的材質。例如,你可能有一個 模型,當它靠近攝像機時,你為它應用了凹凸貼圖 技術,但當你遠離攝像機時,你切換到簡單的紋理 技術,以便提高效能。

每個 技術 可以擁有一個或多個 流程,每個流程對應一個 OpenGL 繪製呼叫。為了使用多流程渲染技術,你需要在你的 技術 中新增多個 流程

流程 包含

  • 一個 效果,它基本上表示一個 GLSL 著色器程式(即頂點著色器和片段著色器);
  • 有關渲染狀態的各種資訊(例如要應用的混合函式、是否啟用深度測試等);
  • 一個 頂點屬性繫結,它封裝(或者模擬,如果你的硬體不支援)一個 OpenGL VAO(頂點屬性物件),並說明 網格 的資料如何與 GLSL 著色器程式中的輸入相關聯。

呼!這似乎是需要記住的長長的清單,但你會發現這個系統提供了很多靈活性,可以以簡潔有序的方式安排你的渲染行為。

建立材質

[編輯 | 編輯原始碼]

設定材質引數

[編輯 | 編輯原始碼]

使用內建著色器

[編輯 | 編輯原始碼]

救命!我無法看到我的模型...

[編輯 | 編輯原始碼]

以下是可能無法看到你的模型(或模型全部顯示為黑色)的一些常見原因。

  • 你沒有設定著色器使用的所有必需的統一變數。你是否記得為著色器中使用的 每個 統一變數呼叫以下函式之一?
    • material->getParameter([uniformName])->setValue([uniformValue]);
    • material->getParameter([uniformName])->bindValue([插入引數]);或
    • material->setParameterAutoBinding([uniformName], [自動繫結名稱]).
  • 你的模型使用的網格不包含著色器所需的所有屬性(即每個頂點資料)。如果你的模型是在 3D 建模程式中生成的,那麼該程式是否匯出了著色器所需的(例如凹凸貼圖所需的切線和副法線資料)所有必要的每個頂點資料?請注意,gameplay-encoder 可以使用 -tb 選項為不包含切線和副法線資料的 FBX 模型生成切線和副法線資料。
  • 你的網格資料已損壞。如果你以過程方式建立了你的網格,或者你的 3D 建模程式中的 FBX 匯出器存在錯誤,則可能會出現此問題。

使用自己的著色器

[編輯 | 編輯原始碼]

使用離屏幀緩衝區

[編輯 | 編輯原始碼]
華夏公益教科書