矩阵变换—仿射变换和齐次坐标

矩阵变换—仿射变换和齐次坐标[Tip]: 齐次向量[x y z w]T ,w = 0时,该齐次向量表示一个点。w = 0时,则表示向量。仿射变换1.缩放变换和旋转变换称为线性变换(linear transform)2.线性变换和平移变换统称为仿射变换(affine t

大家好,欢迎来到IT知识分享网。

[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行的方式将矩阵四阶化。

矩阵变换—仿射变换和齐次坐标

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/87751.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信