Computer Graphics Games101 学习笔记03

这篇博客介绍了2D图形变换,包括剪切、缩放、旋转和平移,并探讨了如何通过矩阵表示这些变换。重点讲解了齐次坐标的概念,以解决平移变换的线性化问题,同时提到了旋转矩阵的特性。文章还讨论了如何拆解和组合变换,以及这些变换在三维空间中的应用。
摘要由CSDN通过智能技术生成

Assignment 0

比较简单的环境配置,网上资料挺多的,这里推荐一个
链接

Transformation

03-Transformation

这一部分主要讲 2 D 2D 2D变换,通过引入矩阵来表示

剪切(shear)

在这里插入图片描述

缩放(scale)

在这里插入图片描述

旋转(Rotation,默认以原点为中心,逆时针旋转多少度)

在这里插入图片描述

平移(translate)

在这里插入图片描述

线性变换

在这里插入图片描述

用矩阵乘上输入坐标得到输出坐标的过程就叫做变换(矩阵是从右往左结合的缘故)

其实可以类比初中数学中的一次函数
而且可以发现一个性质: x ′ x' x x x x的行数一样,推广一下其实代表着变换后得到的东西和之前的东西是一个性质的(比如直线变换后就会得到直线)。

齐次坐标

在这里插入图片描述

之前所有的变换都可以用上图的公式来实现,但是不难发现这不是一个线性变换,因为平移本身就不是线性变换而是仿射变换(Affine),而我们为了省事想要把所有变换都变成线性变换,这样处理起来也方便,不用把平移作为单独的case考虑。但是顺序上还是要先处理线性变换,再进行平移操作的处理(我理解是历史缘故)。

为了实现这个想法,就需要引入齐次坐标了。
齐次坐标其实就是引入了一个新变量,为0的话表示向量,为1表示点。

在这里插入图片描述

而且这也符合常规逻辑

V e c t o r ( 0 ) + V e c t o r ( 0 ) = V e c t o r ( 0 ) Vector(0) + Vector(0) = Vector(0) Vector(0)+Vector(0)=Vector(0)

P o i n t ( 1 ) + V e c t o r ( 0 ) = P o i n t ( 1 ) Point(1) + Vector(0) = Point(1) Point(1)+Vector(0)=Point(1)

P o i n t ( 1 ) − P o i n t ( 1 ) = V e c t o r ( 0 ) Point(1) - Point(1) = Vector(0) Point(1)Point(1)=Vector(0)

P o i n t ( 1 ) + P o i n t ( 1 ) = ? ? ? Point(1) + Point(1) = ??? Point(1)+Point(1)=??? (点和点相加本来没有意义,但是可以运算让其变得有意义,eg:中点)

这样的话之前的所有变换矩阵都可以转换成

在这里插入图片描述

抽象出来其实就是

在这里插入图片描述

Lint:这里有个有意思的地方,旋转矩阵的逆矩阵和转置矩阵一样,也就代表旋转矩阵是正交矩阵

拆解变换

考虑一些复杂情况,不难发现有些图像矩阵的变换是通过上述几种变换的组合形成的,因此这时候就需要把它拆分成几种变化的组合顺序(注意顺序,因为矩阵不满足交换律),而且因为矩阵结合的顺序,因此我们处理变换时也通常是从右往左结合的,或者先把变换矩阵全部结合完成之后再和输入矩阵结合。

在这里插入图片描述

三维的话其实就是多了一维,和上面基本一样,这里不多说了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值