2

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

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

例如,如果我有一个这种格式的 DirectX 顶点: DirectXVertex vertexDX = {x, y, z} 在 OpenGL 顶点中会是什么样子: OpenGLVertex vertexGL = ?

同样在文件中,我有三角形面的数据,其索引指向正确的顶点。它们是否也必须以某种方式进行转换,或者只需要更改顶点?

4

1 回答 1

2

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

MSDN 上的这篇文章描述了如果以其他方式(即从 OpenGL 到 Directx)移植数据,您需要做什么。要点是:

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

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

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

所以,如果上面的文章描述了如何从 OpenGL 移植到 DirectX,你需要做上面的逆向转换。碰巧的是,上述操作的逆操作是完全相同的。

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

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(1.0f, 1.0f, -1.0f);
于 2013-05-17T06:36:45.740 回答