将DirectX顶点转换为OpenGL顶点

将DirectX顶点转换为OpenGL顶点,opengl,directx,ogre,Opengl,Directx,Ogre,我有一个完整的顶点数据文件,它是从使用DirectX的软件导出的。现在我想用它在食人魔中创建一个网格。自从我使用Xcode在Mac上开发以来,我就将Ogre设置为使用OpenGL 我的问题是如何将这些顶点转换为与OpenGL兼容的顶点 例如,如果我有此格式的DirectX顶点: DirectX顶点顶点DX={x,y,z} 在OpenGL顶点中它会是什么样子: OpenGLVertexGL= 在这个文件中,我还有三角形的面数据,这些面的索引指向右顶点。它们是否也必须以某种方式转换,或者只需要更改顶

我有一个完整的顶点数据文件,它是从使用DirectX的软件导出的。现在我想用它在食人魔中创建一个网格。自从我使用Xcode在Mac上开发以来,我就将Ogre设置为使用OpenGL

我的问题是如何将这些顶点转换为与OpenGL兼容的顶点

例如,如果我有此格式的DirectX顶点: DirectX顶点顶点DX={x,y,z} 在OpenGL顶点中它会是什么样子: OpenGLVertexGL=


在这个文件中,我还有三角形的面数据,这些面的索引指向右顶点。它们是否也必须以某种方式转换,或者只需要更改顶点?

DirectX使用左手坐标系,而OpenGL使用右手坐标系

这描述了以另一种方式(即从OpenGL到Directx)移植数据时需要执行的操作。要点是:

Direct3D使用左手坐标系。如果要移植基于右手坐标系的应用程序,则必须对传递给Direct3D的数据进行两次更改

  • 翻转三角形顶点的顺序,以便系统从前面顺时针遍历它们。换句话说,如果顶点是v0、v1、v2,则将它们作为v0、v2、v1传递给Direct3D

  • 使用视图矩阵在z方向上将世界空间缩放-1。为此,翻转用于视图矩阵的D3DMATRIX结构的_31、_32、_33和_34成员的符号

因此,如果上面的文章描述了如何将OpenGL移植到DirectX,那么您需要执行与上面相反的操作,以实现另一种方式的转换。碰巧的是,上述操作的逆运算是完全相同的

OpenGL不像DirectX那样有单独的模型和视图矩阵,因为它们被连接到modelview矩阵中。可以像这样模拟左手坐标系:

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

谢谢你的回答。只要一个问题“翻转三角形顶点的顺序”就意味着翻转验证的顺序({x,y,z}=>{x,z,y})或者翻转三角形面的顺序?@Silex-翻转三角形面的顺序耶,我也是这么想的,谢谢你的帮助和详细的回答!