用于 TRANSFORMATION 2D 的线性变换 :: Basic algorithm ( 基本算法 )

学习目标

简单整理了 SD里使用的数学算法。
比起深入理解,大概理解成是用这种数学形态做出的工具会事更好的学习方向。

用于 TRANSFORMATION 2D 的线性变换
在这里插入图片描述
理解 Transform2D Node 的行列。
利用 2X2 旋转行列进行 2D 旋转和尺寸的变更

线性变化(Linear transformation)

两个vector空间之间的变换 f和任意常数 c, 两个vector α, β满足以下条件的话, f就是线性变换。
• f(α+β)=f(α)+f(β)
• f(cα)=cf(α)

在这里插入图片描述
先看下 SD 的 Transformation 2D 的 inspector 。

标记的是 Transform matrix ,包含旋转和拉伸(大小,变皱,对称) 。
点一下 Matrix 键。
在这里插入图片描述
可以看到显示的是 2X2 行列式。
通常使用 matrix 的时候不会依赖于特殊计算,优点是可以快速处理。
但是也有缺点,旋转图片的时候像素间就不能做 Interpolation 。
这种现象在 0度 , 90度 , 180度等对称型的时候没有大问题,但是非对称的其他角度会有该问题。

通常图片在 Resizing 的时候会 dithered pixel sampling 所以做高分辨率贴图的时候不是很明显。
满足线性变换的具有代表性的变换就是旋转,放大、变皱、对称、投影也属于这部分。

不管是先旋转θ然后再旋转 ω,还是先旋转 ω再旋转 θ, 结果如果是 (θ+ω)的话,就可以知道旋转是线性变换。
移动不是线性变换。所以为了用一个行列表现变换, 会使用利用齐次坐标(Homogeneous coordinates)的仿射变换(Affine transformation)。
现在就可以推算出, SD 提供的 Transformation 2D 的旋转和大小变更(Scale)是使用 2X2 transform matrix ,Offset 是使用仿射变换(Affine transformation)。

反推
先把基底vector (1,0)(1,0)和 (0,1)(0,1)旋转θ。
在这里插入图片描述
如图片所示,把 (1,0)旋转 θ 就是(cosθ,sinθ) 然后把 (0,1)旋转 θ就是 (−sinθ,cosθ)。

在这里插入图片描述

然后旋转行列 R是线性变换,所以以下是成立的。
在这里插入图片描述
这里 R(1,0)和 R(0,1)就是 (cosθ,sinθ), (−sinθ,cosθ)所以代入后反推就结束了。

在这里插入图片描述
相应 0 度的旋转行列是单位矩阵(Identity matrix)。
2X2 旋转行列在除了 0度和 180度外的其他角度里,因为固有值和固有vector会因为非对称性表现成复数的形态。

About JP

链接: Website.
在这里插入图片描述
在这里插入图片描述
出生在韩国的TA。
1997年开始从事电脑图形视觉化工作后,在这个行业已经有21年经验了。
在多个网络游戏公司引领过美术团队,之前在allegorithmic担任TA负责人,在中国网易盘古工作室担任TA总监,现在是巨人网络TA部门的总负责人。
懒惰的人才有创意”是他坚信并执行的哲学道理。

发布了54 篇原创文章 · 获赞 22 · 访问量 8074
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览