2012-11-10 109 views
4

我只处理DirectX的矩阵OpenGL的矩阵VS DirectX的矩阵

我已阅读文章,说你不能使用DirectX矩阵数学库的OpenGL矩阵。

但我也读过,如果你的数学是一致的,你可以得到类似的结果。这让我更加困惑。

任何人都可以启发我吗?或者如果你不能在OpenGL矩阵上使用DirectX数学。有谁知道一个好的OpenGL矩阵库?

任何帮助了解他们的差异和数学知识将不胜感激。

+0

看起来像他们是不同的:http://www.mindcontrol.org/~hplus/graphics/matrix-layout.html。相关:http://stackoverflow.com/questions/3695520/how-to-adapt-directx-style-world-view-projection-matrices-to-opengl。 http://www.opengl.org/discussion_boards/showthread.php/133554-Converting-a-DirectX-Matrix-to-OpenGL-Not-possible。他们可能只是彼此的转置:http://en.wikipedia.org/wiki/Transpose –

回答

6

我已阅读文章,说你不能使用OpenGL矩阵的DirectX矩阵数学库。

这是错误的。

但我也读过,如果你的数学是一致的,你可以得到类似的结果。

唯一的区别是关于OpenGL和DirectX对其标准化设备坐标空间的默认假设。他们使用略有不同的范围和标志。然而,这只能转化为一个转换堆栈,其中包含一个额外的“适配器”矩阵,并已完成。

同样重要的可能是指数的排序,但现代的OpenGL允许你选择哪个顺序使用的参数名称的glUniformMatrix“转”

+0

所以你说的话如果我使用我的directX数学库,当我通过我的矩阵只是确保检查转置布尔? –

+0

@FrankyRivera:那你和你的投影矩阵需要一些预翻译的缩放比例。 IIRC'规模(0.5,0.5,-1)·翻译(1,1,0)'但不要让我失望。 – datenwolf

2

我想添加到datenwolf是通过使伟大的答案它更清楚地表明,OpenGL的矩阵和DirectX的矩阵之间的主要区别在于它们分别是列主格式和行主格式。 (列和行主要是指你如何以4x4格式写出它们,如果翻译出现在第四列中,那么是列主要的,反之亦然)。

数学家会告诉你专栏是表示矩阵的正确方法,主要是因为它可以在视觉上(在纸上)更容易地对它们进行操作。

但是,在OpenGL中,整个矩阵连续地放置在内存中的16个元素的阵列中,根据specifications,翻译占据了第13,14和15个元素。因此,很容易使数据适应任何一种矩阵格式。