將簡單的 OpenGL ES 2.0 轉譯器連線至 Direct3D 11
在此移植練習中,我們將從基本概念開始:將簡單的轉譯器從 OpenGL ES 2.0 帶入 Direct3D,使其符合 Visual Studio 2015 的 DirectX 11 應用程式 (通用 Windows) 範本。 當我們逐步解說此移植程序時,您將瞭解下列內容:
- 如何將一組簡單的頂點緩衝區移植到 Direct3D 輸入緩衝區
- 如何將統一和屬性移植到常數緩衝區
- 如何設定 Direct3D 著色器物件
- Direct3D 著色器開發中如何使用基本 HLSL 語意
- 如何將非常簡單的 GLSL 移植到 HLSL
本主題會在您建立新的 DirectX 11 專案之後開始。 若要瞭解如何建立新的 DirectX 11 專案,請閱讀為通用 Windows 平台 (UWP) 建立新的 DirectX 11 專案。
從任一連結建立的專案已準備好 Direct3D 基礎結構的所有程式碼,您可以立即開始將轉譯器從 Open GL ES 2.0 移植到 Direct3D 11 的程序。
本主題會逐步解說執行相同基本圖形工作的兩個程式碼路徑:在視窗中顯示旋轉的頂點著色立方體。 在這兩種情況下,程式碼涵蓋下列程序:
- 從硬式編碼的資料建立立方體網格。 此網格會以頂點清單表示,每個頂點都有位置、一般向量和色彩向量。 此網格被放入頂點緩衝區中以供著色管線進行處理。
- 建立著色器物件來處理立方體網格。 有兩個著色器:處理頂點以進行點陣化的頂點著色器,以及在點陣化後為立方體的各個像素著色的片段 (像素) 著色器。 這些像素會寫入轉譯目標以供顯示。
- 形成分別用於頂點著色器和片段著色器中的頂點和像素處理的著色語言。
- 在畫面上顯示轉譯的立方體。
完成本逐步解說之後,您應該熟悉 Open GL ES 2.0 與 Direct3D 11 之間的下列基本差異:
- 頂點緩衝區和頂點資料的表示法。
- 建立和設定著色器的程序。
- 著色語言,以及著色器物件的輸入和輸出。
- 畫面繪圖行為。
在本逐步解說中,我們會參考簡單且一般的 OpenGL 轉譯器結構,其定義方式如下:
typedef struct
{
GLfloat pos[3];
GLfloat rgba[4];
} Vertex;
typedef struct
{
// Integer handle to the shader program object.
GLuint programObject;
// The vertex and index buffers
GLuint vertexBuffer;
GLuint indexBuffer;
// Handle to the location of model-view-projection matrix uniform
GLint mvpLoc;
// Vertex and index data
Vertex *vertices;
GLuint *vertexIndices;
int numIndices;
// Rotation angle used for animation
GLfloat angle;
GLfloat mvpMatrix[4][4]; // the model-view-projection matrix itself
} Renderer;
此結構有一個執行個體,並包含轉譯非常簡單頂點著色網格所需的所有元件。
注意:本主題中的任何 OpenGL ES 2.0 程式碼都是以 Khronos 群組所提供的 Windows API 實作為基礎,並使用 Windows C 程式設計語法。
您需要瞭解的資訊
技術
- Microsoft Visual C++
- OpenGL ES 2.0
必要條件
- 選擇性。 檢閱將 EGL 程式碼移植到 DXGI 和 Direct3D。 請閱讀本主題,以進一步瞭解 DirectX 所提供的圖形介面。
步驟
主題 | 說明 |
---|---|
從 OpenGL ES 2.0 移植簡單轉譯器時,第一步是在 Direct3D 11 中設定等效的頂點和片段著色器物件,並確保主程式在編譯後可以與著色器物件進行通訊。 |
|
在此步驟中,您將定義包含網格的頂點緩衝區,以及允許著色器以指定順序周遊頂點的索引緩衝區。 |
|
一旦您完成了建立和設定緩衝區和著色器物件的程式碼,就可以將這些著色器內的程式碼從 OpenGL ES 2.0 的 GL 著色器語言 (GLSL) 移植到 Direct3D 11 的高階著色器語言 (HLSL)。 |
|
最後,我們將繪製旋轉立方體的程式碼移植到畫面上。 |
其他資源