前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GAMES101-现代计算机图形学课程笔记】Lecture 03 Transformation

【GAMES101-现代计算机图形学课程笔记】Lecture 03 Transformation

作者头像
marsggbo
发布2020-06-12 10:12:53
9510
发布2020-06-12 10:12:53
举报

1. Why study transformation

1.1 Modeling

  • translation (平移)
  • rotation(旋转)
  • scaling (缩放)
  • projection (投影)

2. 2D transformations: rotation, scale, shear

我们在求解变换矩阵的时候其实只需要去满足一些特殊点即可算出变换矩阵了,而不需要死记硬背一些公式。具体可以看看旋转矩阵的推导示例。

2.1 Scale (缩放变换)

假设原坐标为

\left[\begin{array}{l}x \\ y\end{array}\right]
  • Scale Matrix (缩放矩阵)
  • Rotation Matrix (旋转矩阵)
Rotation Matrix
Rotation Matrix

求解可得

A=\cos \theta, C=\sin \theta

同理将左上角坐标变换代入计算即可求出B,D。

另外旋转矩阵具有一些比较有意思的性质,这些性质在下一节会用到

  • 旋转θ角度
R_{\theta}=\left(\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta\end{array}\right)
  • 旋转-θ角度
R_{-\theta}=\left(\begin{array}{cc}\cos \theta & \sin \theta \\ -\sin \theta & \cos \theta\end{array}\right)

很显然有

R_{-\theta}=R_\theta^T

,而又由定义可知

R_{-\theta}=R_\theta^{-1}

,因为这两个操作是互逆的嘛。

也就是说

R_{-\theta}=R_\theta^T=R_\theta^{-1}

,而在数学上如果一个矩阵的逆等于它的转置,那么就称这个矩阵为正交矩阵(Orthogonal Matrix),即旋转矩阵是正交矩阵。

3. Homogeneous coordinates (齐次坐标)

3.1 为什么需要引入齐次坐标呢?

显然上述操作并不能用矩阵乘法来表示,因此平移变换不能像前面的变换操作一样可以直接用矩阵乘法表示,所以为了让平移变换也可以以一种优雅的矩阵乘法形式表示,所以需要引入齐次坐标

3.2 如何使用齐次坐标

以二维坐标为例,我们可以通过额外加入一个坐标来使用齐次坐标。因此:

  • 一个2D的点,可以表示为
(x, y, 1)^{\top}
  • 一个2D向量,可以表示为
(x, y, 0)^{\top}

3D情况同理,表示如下:

  • 3D point
=(x, y, z, 1)^{\top}
  • 3D vector
=(x, y, z, 0)^{\top}

那为什么点和向量最后一项一个是1,而另一个是0呢?仔细想想这样设计是非常smart的操作,因为它满足了如下性质:

  • vector + vector = vector (第三维仍然是0,所以表示向量)
  • point - point = vector (这符合我们学习向量时所给出的定义,即某点指向另一个点,那不就表示向量了吗,而且相减之后第三维恰巧就是0)
  • point + vector = point (这个很好理解,不再赘述)
  • point + point = ?point 最后一个我们用一个例子来说明,假设两个点分别为
a=(0, 1, 1)^{\top},b=(0, 3, 1)^{\top}

,那么

c=a+b=(0, 4, 2)^{\top}

,因为第三维只能是0或者1,所以我们可以对每一维除以2,那么就可以得到

c=(0, 2, 1)^{\top}

,这不就是a,b的中点吗!!!是不是感觉很奇妙!

3.3 Affine Transformations (仿射变换)

为了将上述变换统一起来,所以提出了仿射变换,即

Affine map = linear map + translation (仿射变换 = 线性变换 + 平移变换)

仔细观察可以知道左边一系列的矩阵相乘其实就等价于一个3x3的矩阵,换句话说一个3x3矩阵可以对2D向量做超级多的变换。

如果一个变化比较复杂该怎么弄呢?很简单我们可以通过对复杂变化做分解来简化,例如如果我们想以下图中(最左边)的正方形左下角为中心进行旋转该怎么做呢?

很简单我们可以先将左下角顶点通过平移变换移动到原点,然后再做旋转,最后将左下角顶点平移回原处即可。

MARSGGBO♥原创 如有意合作或学术讨论欢迎私戳联系~ 邮箱:marsggbo@foxmail.com 2020-04-25 09:43:30

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Why study transformation
    • 1.1 Modeling
    • 2. 2D transformations: rotation, scale, shear
    • 2.1 Scale (缩放变换)
    • 3. Homogeneous coordinates (齐次坐标)
      • 3.1 为什么需要引入齐次坐标呢?
        • 3.2 如何使用齐次坐标
          • 3.3 Affine Transformations (仿射变换)
            • MARSGGBO♥原创 如有意合作或学术讨论欢迎私戳联系~ 邮箱:marsggbo@foxmail.com 2020-04-25 09:43:30
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档