2013-05-16 229 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