【图形学笔记】Lecture04-Transforms 变换
Lecture04-Transforms 变换
Transforms 变换
变换有什么用?1、建模。2、观察。
- Scale Transform(non-uniform anisotropic)缩放变换(非规范,各向异性),如果是规范的就叫 相似变换(Similarity Transform)。
- Reflection Transform 反射变换。
- Shear Transform 剪切变换。
- Rotate (CCW by default)旋转(默认逆时针)
- Translation 平移:需要加一个维度(齐次坐标 Homogeneous Coordinates)
- 在齐次坐标上,
在2D里面对应点
- 在齐次坐标上,
- Affine Transformation 仿射变换
对应着先做线性变换(这里其实还有个概念叫刚体变换 Rigid Transform),再做平移
- Projective Transform 对应着任意一个矩阵
Composite Transform 分解变换
有点显然,跳了。
Q:如何沿着给定的点
A:先把c平移到原点,旋转,再平移回去,
3D Transformations 三维的变换
几乎一样的,先线性变换,再平移。
旋转
绕着
然后
Rodrigues 罗德里格旋转公式
沿着向量
注记:
- 1、注意这里的轴是默认过原点的,没过原点自然就要平移啦。
- 2、右边的矩阵是个什么鬼东西?仔细想,这个向量对应着叉积运算:
Viewing Transformation 视图变换
-
相机和物体一起移动,那么得到的照片是一样的。
-
考虑把照相机移动到原点,并且朝着
轴的方向看,然后把物体做对应的变换。相机有哪些关键的信息? -
需要固定观测的方向
,以及向上的方向(相机的向上方向) ,同时通常会定一个向 。
也就是说假设给相机做了变换
- 1、移动到原点。
- 2、旋转
(gaze direction)到 轴,旋转 到 轴,旋转 到 轴。
第一步是
第二步看起来不好求,考虑逆变换矩阵(这里相当于直接对列向量写):
然后注意到一个事实:对于任意
最后
Projection Transformation投影变换
orthographic/perspective projection 正交/透视投影
Orthographic Projection正交投影
通过平移把立方体
这时候
注意: 现在的变换看来,会觉得沿着
Perspective Project 透视投影
三维空间怎么做透视投影?
- 1、先挤压(squish),把锥台体(frustum)变成一个立方体(cuboid)。
- 2、再做正交投影
标准的透视投影(只看头尾)
如果只看前后平面,透视投影之后
- 中心在
,想想投影平面在 。 - 如何用矩阵表示变换?齐次坐标! 所有形如
的齐次坐标 ,都对应着3维空间里的点 ! - 所以就变成考虑:
Perspective to Orthographic
我们现在希望透视到正交的这一步,能保持一些性质:
-
1、近平面和远平面的
应该保持不变。 -
2、近平面和远平面的中心(假设平面中心穿过
轴)的坐标应该保持不变。 -
3、
变换和上面的一样, ,其中 表示到近平面的距离。
于是:
假设最左边到最右边乘了个我们要的矩阵
接着考察远近平面的中心不变这条性质,取近平面上任意一点 ,要有
再考虑远平面的中心
最终
以及
Q:那么在近平面和远平面中间的点的变化是均匀的吗?
A:并不是,比如取
Hierarchical Transforms 层次变换
每个形状都有自己的变换,如果单独编辑一个元素,可以引起很多变换。
引入“骨骼”(Skeleton)的概念,分组表示:
- 每个组包含一些更小的组,或者形状
- 每个组的变换和上一级的组的变换相关
- 每个组的变换自然就是,从根节点下来的变换的复合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律