矩阵变换 — 仿射变换和齐次坐标
Thepoly原创 40333 0
实名

通过了实名认证的内容创造者

发布于 2022-6-6 15:25:56

您需要 登录 才可以下载或查看,没有账号?注册

x
81206981b603f57a91c07389ac43df78.jpg



Hello . 大家好
今天给大家带来矩阵变换思路分享
我是麦田


a8e7f8990925571c6f19c9a600dbce26.png




[Tip]: 齐次向量[x       y       z       w]T  ,w = 0时,该齐次向量表示一个点。w = 0时,则表示向量。

仿射变换

1.缩放变换和旋转变换称为线性变换(linear transform)

2.线性变换和平移变换统称为仿射变换(affine transfrom)

3.投影变换所用到的变换则称为射影变换

齐次坐标

1.齐次坐标是用N + 1个数来表示N 维坐标的一种方式。

2.如三维矩阵无法通过右乘进行平移变换,将三维坐标扩展成四维齐次坐标。

2D矩阵



通过上图,可以构建如下矩阵:

3D矩阵

缩放

三维空间的缩放可以用3X3的矩阵 M_scale 表示(1-1):


1.scaleX ,scaleY ,scaleZ 分别表示沿着x,y,z轴方向上的缩放系数。如果全部缩放系数都相等, 那么该缩放操作称为均匀缩放,否则,称为非均匀缩放。

2.Unity中使用列向量和列矩阵描述顶点信息,所以可以把顶点坐标右乘缩放矩阵实现缩放操作。


旋转

1.在Unity里面,我们约定旋转顺序是先Z轴,再X轴,最后Y 轴,但是由于我们旋转会导致向量基方向变化,所以如果按照上面的顺序是有问题的,所以只要反过来写:先Y 轴,再X轴,最后Z轴。

2.要定义一个旋转操作,需要定义对应的旋转轴。当某向量分别绕着坐标系的xyz旋转θ角度时,分别 用以下旋转矩阵Mr_x  ,Mr_y  ,Mr_z 表示:


代码举例:自定义灯光旋转

构建旋转矩阵


构建灯光


平移

与缩放旋转不同,平移是一个加法操作。平移变换不是一个线性操作。

因为用右乘一个三阶矩阵实现对一个三维向量进行平移变换是不可能实现的。要解决这个问题,需要使用齐次坐标。

将三维向量[x       y       z]T 扩展成一个四维其次坐标[x       y       z       w]T 。将平移向量扩展成为四阶矩阵的形式。


旋转与缩放矩阵也可以通过增加第4列与第4行的方式将矩阵四阶化。


仿射变换的原理就在这里了,有问题欢迎大家指正。


- End -

喜欢Thepoly的可以通过三种方式与我们建立联系。分别是公众号、微信群以及QQ群。公众号是我们最为官方的窗口,更多内容都必须关注公众号后才能获取。另外现已开通网站:www.thepoly.cn更多精彩请关注我们。
         

评分

参与人数 3元素币 +18 活跃度 +11 展开 理由
monkeyhaha + 2 + 4 爱了
拷给你 + 8 + 5 给力
July + 8 + 2 优秀

查看全部评分

本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表