以下是我自己结合书的例子的思考,如有错误,欢迎指正,大家一起学习
OpenGL中矩阵默认为列优先。C/C++中默认是行优先的。也就是说当年你构建一个二维数组时,在内存中是一行一行存储的,顶部的行在更低的地址区。矩阵相乘时,行优先采用我们数学中正确的方式,即一行和一列对应相乘再求和 Cij = ∑ Ain * Bnj。而列优先中计算为一列与一列对应相乘再求和Cij = ∑ Ani * Bnj。
比如一个点(x,y,z,w)先平移变换T:(x1,y1,z1),再按Z轴旋转R:θ,则c/c++中变换矩阵存储为
⎡⎣⎢⎢⎢100001000010x1y1z11⎤⎦⎥⎥⎥ [ 1 0 0 x 1 0 1 0 y 1 0 0 1 z 1 0 0 0 1 ]
⎡⎣⎢⎢⎢cosθsinθ00−sinθcosθ0000100001⎤⎦⎥⎥⎥ [ c o s θ − s i n θ 0 0 s i n θ c o s θ 0 0 0 0 1 0 0 0 0 1 ]
而OpenGL中存储为
⎡⎣⎢⎢⎢100x1010y1001z10001⎤⎦⎥⎥⎥ [ 1 0 0 0 0 1 0 0 0 0 1 0 x 1 y 1 z 1 1 ]
⎡⎣⎢⎢⎢cos