Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math OpenGL矩阵与DirectX矩阵_Math_Opengl_Matrix_Directx - Fatal编程技术网

Math OpenGL矩阵与DirectX矩阵

Math OpenGL矩阵与DirectX矩阵,math,opengl,matrix,directx,Math,Opengl,Matrix,Directx,我只处理过DirectX矩阵 我读过一些文章,说不能将DirectX矩阵数学库用于openGL矩阵 但我也读到,如果你的数学是一致的,你可以得到类似的结果。这让我更加困惑 谁能启发我?或者如果无法在openGL矩阵上使用DirectX数学。有人知道一个好的openGL矩阵库吗 如果有人能帮助我们理解他们的差异和数学知识,我们将不胜感激 我读过一些文章,说不能将DirectX矩阵数学库用于openGL矩阵 这是错误的 但我也读到,如果你的数学是一致的,你可以得到类似的结果 唯一的区别在于OpenG

我只处理过DirectX矩阵

我读过一些文章,说不能将DirectX矩阵数学库用于openGL矩阵

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

谁能启发我?或者如果无法在openGL矩阵上使用DirectX数学。有人知道一个好的openGL矩阵库吗

如果有人能帮助我们理解他们的差异和数学知识,我们将不胜感激

我读过一些文章,说不能将DirectX矩阵数学库用于openGL矩阵

这是错误的

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

唯一的区别在于OpenGL和DirectX对其规范化设备坐标空间的默认假设。它们使用的范围和符号略有不同。然而,这只会转化为一个带有额外“适配器”矩阵预乘的转换堆栈,您就完成了


索引顺序可能也很重要,但现代OpenGL允许您选择名称“transpose”的glUniformMatrix参数使用的顺序

我想补充datenwolf的伟大答案,让大家更清楚地认识到OpenGL的矩阵和DirectX的矩阵之间的主要区别在于它们分别采用列主格式和行主格式。(Column-and row major指的是如何以4x4格式写出它们。如果翻译出现在第四列中,则为Column major,反之亦然,则为row major。)

数学家们会告诉你,column major是表示矩阵的正确方法,主要是因为它使对矩阵的操作在视觉上(在纸上)更容易


然而,对于OpenGL来说,整个矩阵在内存中以16个元素的数组连续排列,根据数据,平移占据了第13、14和15个元素。因此,很容易将数据调整为任一矩阵格式。

看起来它们是不同的:。相关:。它们可能只是彼此的转置:所以你的意思是,如果我在传递矩阵时使用我为directX制作的数学库,请确保检查转置布尔值?@FrankyRivera:那你的投影矩阵需要一些平移缩放预乘。IIRC
Scale(0.5,0.5,-1)·Translate(1,1,0)
但不要把我的意思固定下来。