为什么OpenGL使用列主矩阵顺序?

为什么OpenGL使用列主矩阵顺序?,opengl,graphics,Opengl,Graphics,我知道什么是专栏专业以及如何处理它。问题:以这种方式实施该系统的目的是什么?任何技术或概念限制?通过在内存中这样排列矩阵,您可以立即访问列向量(显然)。当使用右关联乘法时(即OpenGL和大多数其他图形系统所做的允许轻松链接变换的操作),矩阵的列向量是矩阵映射到的坐标系的基向量 轻松访问这些基向量对于进一步的图形操作非常有用,比如设置镜像平面、广告牌等 TL;DR:在进行图形编程时,您通常希望将变换的基向量用于其他事情。如果使用右联想乘法,则基向量是变换矩阵的列。glUniformMatrix*

我知道什么是专栏专业以及如何处理它。问题:以这种方式实施该系统的目的是什么?任何技术或概念限制?

通过在内存中这样排列矩阵,您可以立即访问列向量(显然)。当使用右关联乘法时(即OpenGL和大多数其他图形系统所做的允许轻松链接变换的操作),矩阵的列向量是矩阵映射到的坐标系的基向量

轻松访问这些基向量对于进一步的图形操作非常有用,比如设置镜像平面、广告牌等


TL;DR:在进行图形编程时,您通常希望将变换的基向量用于其他事情。如果使用右联想乘法,则基向量是变换矩阵的列。

glUniformMatrix*
有一个参数告诉OpenGL要使用哪个布局。因此,列主格式和行主格式都是可能的。然而,这个问题表明,在内部存储行主格式更便于缓存:@AaronFranke:是的,对于较大的矩阵,缓存效果会很快变得明显。然而,我们在图形编程中处理的弱4×4矩阵往往完全适合现代CPU的向量寄存器,因此通常发生的情况是,首先将整个矩阵作为一个整体预取,然后计算完全在寄存器上进行。现在的编译器非常聪明,在使用-O2或-O3进行编译时,我的linmath.h也能做到这一点。