2013-05-16 274 views
1

我有一個充滿頂點數據的文件,這些頂點數據是從使用DirectX的軟件導出的。現在我想在Ogre中創建一個網格。我將Ogre設置爲使用OpenGL,因爲我使用Xcode在Mac上開發。將DirectX頂點轉換爲OpenGL頂點

我的問題是如何將這些頂點是兼容OpenGL?

例如,如果我有這種格式的DirectX頂點: DirectXVertex vertexDX = {X,Y,Z} 會是什麼樣子的OpenGL的頂點: OpenGLVertex vertexGL =?

而且在文件中我有索引到右側頂點的三角形面的數據。它們是否必須以某種方式轉換,或者只有頂點需要更改?

回答

2

的DirectX使用左手座標系,而OpenGL的使用右手系統。

article on MSDN介紹您需要做什麼,如果移植數據的其他方式(即從OpenGL的到DirectX)。要點如下:

Direct3D使用左手座標系。如果要移植基於右手座標系的應用程序,則必須對傳遞給Direct3D的數據進行兩處更改。

  • 翻轉三角形頂點的順序,以便系統從前面順時針移動它們。換句話說,如果頂點是v0,v1,v2,將它們傳遞給Direct3D作爲v0,v2,v1。

  • 在z方向使用視圖矩陣是按比例的世界空間由-1。爲此,請翻轉用於視圖矩陣的D3DMATRIX結構的_31,_32,_33和_34成員的符號。

所以,如果上面的文章介紹瞭如何端口來回的OpenGL到DirectX,你需要做上述的逆其他方式轉換。碰巧,上述操作的逆過程完全相同。

OpenGL的沒有單獨的模型和視圖矩陣等的DirectX確實,因爲它們被連接到模型視圖矩陣。你可以像這樣模擬一個左手座標系:

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glScalef(1.0f, 1.0f, -1.0f); 
+0

謝謝你的回答。只有一個問題「翻轉三角形頂點的順序」意味着翻轉這些三角形的順序({x,y,z} => {x,z,y})或者翻轉三角形的面的順序? – Silex

+1

@Silex - 翻轉三角形臉部的順序 –

+0

是的,這就是我的想法,謝謝你的幫助和詳細的答案! – Silex