使用矩阵转换位置、旋转和缩放
将游戏对象的变换表示为矩阵
该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。
游戏对象的位置、旋转和大小可以用矩阵表示。 我们首先检查一下基于二维原点的变换。
尺寸换算
[ sx 0 ] [ x ] = [ sx * x ]
[ 0 sy ] [ y ] [ sy * y ]
X 轴是sx,Y轴为sy增加多达 如果两者之一为负,则基于该轴翻转。
旋转变换
[ cosθ -sinθ ] [ x ]
[ sinθ cosθ ] [ y ]
该矩阵将矢量绕原点旋转 θ。 请注意不要将接受 Degree 的函数与接受 Radian 的函数混合在一起。
为什么运动是3×3?
仅使用 2×2 矩阵无法将原点移动到另一个位置。 所以在二维坐标中w = 1使用齐次坐标并添加 。
[ 1 0 tx ] [ x ] [ x + tx ]
[ 0 1 ty ] [ y ] = [ y + ty ]
[ 0 0 1 ] [ 1 ] [ 1 ]
在3D中,出于同样的原因使用4×4矩阵。
订单变更结果
将对象的大小加倍然后向右移动 10 度与先移动对象然后将整个坐标加倍所得到的结果不同。
Scale → Translate
位置移动 10
Translate → Scale
移动量可以加倍
由于每个引擎和数学库在向量放置在行还是列上方面有所不同,因此必须在文档中检查代码的乘法顺序。 采用什么坐标系以及以什么顺序应用比矩阵本身更重要。