我查看过多个资源,例如http://antongerdelan.net/teaching/3dprog1/maths_cheat_sheet.pdf
我发现我应该使用列主要排序,当我发现这个问题的答案时会出现混乱
Why does my translation matrix needs to be transposed?
答案显示了列主要排序中的转换矩阵,但之前的资源显示了列主要排序中的转换矩阵,它似乎是此答案中显示的转置矩阵。
我理解这个答案中的矩阵是正确的,因为我已经尝试过并且我的转换有效。我想要找到的是列主要缩放,旋转和透视矩阵也用这个c ++数组样式表示法编写,而不是第一个资源中的那个。
答案 0 :(得分:2)
仔细阅读
Why does my translation matrix needs to be transposed?
不同之处在于,您正在查看的第一页显示矩阵的数学符号,其中每个列都沿垂直线排列;而您正在查看的另一种表示法是一系列字符,类似于您的C ++代码中可能出现的字符。还有许多其他差异,例如数学符号中的高方括号(在C ++代码中不可能完全重现,因为没有跨越多行的字符),以及数字之间没有逗号的事实数学符号。
但主要的是,由于矩阵以列主顺序存储,如果按照存储顺序初始化条目(例如使用符号从逗号分隔列表初始化数组) ),然后x
,y
,z
和1
将是您将在矩阵中设置的最后四个条目。并且由于C ++总是被解析为从左到右读取的线性字符串(解析器并不关心在查看列表时直接在其他数字下面的数字),如果您碰巧格式化16的列表值为4行,每行4个值,列表中的最后四个值是格式的最后行上的值。