1 线性代数中矩阵的标准定义
矩阵的标准定义:
矩阵A与B的乘积矩阵C的第i行第j列的元素c(ij)等于A的第i行与B的第j列的对应元素乘积的和。
无论是Direct3D或者OpenGL,所表示的矢量和矩阵都是依据线性代数中的标准定义的。
2 行主序矩阵与列主序矩阵
矩阵的存储方式分为两种,一种是行主序/行优先矩阵,另一种是列主序/列优先矩阵。在Direct3D中采用行主序矩阵存储矩阵,将矩阵每一行存储到数组的每一行中。而在OpenGL中采用列主序矩阵存储,将矩阵的每一列存储到数组的每一行中。
说的有点复杂,将下面矩阵示例:
1. 标准的线性代数矩阵
- Direct3D行主序矩阵
- OpenGL列主序矩阵
3 由矩阵存储顺序引发的矩阵左乘/前乘或者右乘/后乘问题
从根本上来说,矩阵的定义是确定的,但是在不同的引擎的实现过程中对矩阵的存储方式选择了行主序矩阵或者列主序矩阵的存储方式,而由此引发了矩阵左乘或者是右乘的问题。
在线性代数中,矩阵乘法是“行*列”。
而对于行主序矩阵,通常采用前乘。
对于列主序矩阵,通常采用后乘。
4 由矩阵存储顺序引发的变换顺序问题
而这种矩阵乘法的顺序通常影响了对目标物体的变换顺序。
在OpenGL中,因为其实际上是列主序矩阵,采用列向量,所以在OpenGL中,做旋转变换时通常先处理右边的矩阵,然后再处理左边的矩阵。
在Direct3D中,因为其实际上是行主序矩阵,采用行向量,所以在Direct3D中,做旋转变换时通常先处理左边的矩阵,然后在处理右边的矩阵。
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:矩阵 – 行主序矩阵与列主序矩阵
原文链接:https://www.stubbornhuang.com/771/
发布于:2020年03月20日 9:41:57
修改于:2023年06月26日 22:31:26
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50