矩阵 – 行主序矩阵与列主序矩阵
原创文章,作者:StubbornHuang,如若转载,请注明出处:《矩阵 – 行主序矩阵与列主序矩阵》https://www.stubbornhuang.com/771/
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中,做旋转变换时通常先处理左边的矩阵,然后在处理右边的矩阵。
如果您觉得对您有帮助,可以请站长喝一杯咖啡哦!
用支付宝或者微信扫描二维码
对站长进行赞助
![]() 支付宝扫一扫 |
![]() 微信扫一扫 |
金额随意,礼清义重
当前分类随机文章推荐
全站随机文章推荐
- 默认的左手坐标系与右手坐标系的比较
- 资源下载 - 地球编年史1-7本高清带书签PDF下载
- Duilib - CDuiString转换为std::string
- C++11 - override关键字简要介绍
- WordPress - 在浏览器的console输出信息
- 解决Python爬虫在爬资源过程中使用urlretrieve函数下载文件不完全且避免下载时长过长陷入死循环,并在下载文件的过程中显示下载进度
- 资源分享 - Computational Geometry - Algorithms and Applications, 3rd Edition英文pdf下载
- WordPress - 使用插件的方式作出类似向主题function.php中添加代码的功能
- C++ - vector存储动态指针时正确释放内存
- 资源下载 - Go语言核心编程李文塔 高清带书签版pdf下载