games101-3-Transformation

Scale缩放

默认以原点为中心缩放。

(1)均匀缩放

img

image-20230515161619367

(2)非均匀缩放

img

img->img

Reflection反射

img

image-20230515161742312

Shear Matric

img

image-20230515161856725

Rotate旋转

img

此处是2维旋转,默认以(0,0)为重心旋转,默认以逆时针旋转,也就是角度值为正。

img

以边长为1进行旋转矩阵推导:

image-20230515162027508

如果旋转-θ:

img

矩阵为旋转θ时旋转矩阵的转置,并且由于旋转-θ是旋转θ的逆变换,因此该矩阵还为旋转θ时旋转矩阵的逆矩阵(一个矩阵的转置等于其正交矩阵,则该矩阵为正交矩阵)

线性变换

image-20230515162329289

Translation平移

img

此处是先进性线性变换再平移。

image-20230515162355592

齐次坐标

引入齐次坐标是为了将所有变换都变成一个矩阵乘以一个向量的形式。

img

点的平移变换,点平移后成为新的点:

img

向量具有平移不变性:

img

可以通过齐次坐标的w验证:

img

一个点加上一个点的结果是这两个点的中点,原因如下,在w不等于0的情况下,(x,y,w)是二维点(x/w,y/w,1)。

Affine Transformation仿射变换

2维仿射变换最后一行才是(0,0,1),如下矩阵是先进行线性变换再进行平移变换。

img

缩放变换矩阵 旋转变换矩阵 平移变换矩阵
img img img
Inverse Transform逆变换

逆变换相当于乘以变换的逆矩阵。

image-20230515164100755
Composite Transform组合变换

复杂变换可以通过简单变换得到,变换的顺序很重要,如下先进行平移变换再进行旋转变换(默认围绕原点旋转)和先进行旋转变换再进行平移变换的结果不同。再次说明了矩阵乘法不能随意交换顺序。在c中cos和sin函数的参数都是弧度

(1)弧度转角度:角度 = 弧度 * (180.0f / PI)

(2)角度转弧度:弧度 = 角度 * (PI / 180.0f)

img

img

img

将变换变成矩阵乘法,相当于从右到左应用。也可以先计算左边所有矩阵得到一个矩阵。

img
变换分解

由于旋转默认是围绕原点旋转,如果想围绕任意点旋转,可以将变换按照如下方式分解:

img

三维齐次坐标

img

在w不等于0的情况下,(x,y,z,w)是三维点(x/w,y/w,z/w,1)。

三维仿射变换

如下矩阵是先进行线性变换再进行平移变换。

img

三维缩放

img

三维平移

img

三维绕轴旋转

imgimg

img

任意旋转都可由如下的欧拉角组合获得(还有一种四元数旋转法,便于做叉乘):

img

任意旋转还可以使用如下的旋转公式,a是角度,n是任意向量,如果向量方向相同起始点不同,旋转结果会不同,所以此处默认向量过原点:

img

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信