在.Net Framework 4.6.2(及更低版本)中,Matrix4x4
名称空间中存在System.Numerics
结构。
该结构具有属性Translation
,该属性显然用于存储翻译部分。
但是,使用此属性时,它将值存储在最后一行
示例:
var test = Matrix4x4.CreateTranslation(new Vector3(1, 2, 3));
产生以下矩阵:
1、0、0、0
0,1,0,0
0,0,1,0
1、2、3、1
但是应该是
我认为1、0、0、1
0、1、0、2
0,0,1,3
0,0,0,1
。
这是一个错误还是我完全错了?
答案 0 :(得分:5)
翻译矩阵是“转置的”,因为System.Numerics定义了行向量:
对于矩阵变换,Vector2,Vector3和Vector4 实例表示为行:向量v由a转换 vM乘法的矩阵M。
(source)
数学如下:
/ 1 0 0 0 \
[a b c 1] * | 0 1 0 0 | = [a+A b+B c+C 1]
| 0 0 1 0 |
\ A B C 1 /