小白计算机图形学入门之路一(Games101-2)

前言:

        在阅读本篇笔记之前,可以先了解一个思维方式:引入一个概念是为了解决某个问题,因此每一个概念都会有自己独有的意义,当然也是有缺点也是有优点的。本篇博客也是对games101-2的一个小小的复习笔记,后续争取两到三天一更,感谢各位大佬提出意见。

1、变换

1.1、为什么要学习变换呢?

        拿unity来说,我们在使用unity制作游戏或者其他应用的时候,变换是时刻发生的,比如旋转或者平移等等。其次关于变换有个很重要的作用在于,空间的转换实际上是各个变换转变过来的,举个很简单的例子,unity的渲染流程可以简单概括为模仿视角(摄像机处于perspective的模式),将3D的变成2D的投影在屏幕上,这就是投影变换。

2、线性变换(Linear Transform)

2.1 大概介绍

        首先这里为什么要介绍线性变换以及计算方法呢?在unity中确实已经将各种变换进行了封装,有对应的旋转矩阵、平移矩阵等等,但是在unity的渲染管线中我们在顶点着色器等等地方是可控的,同样,当我们明白了原理以后,调用unity自带的api也会变得更加得心应手,因此这里将会着重介绍一下线性变换的过程和具体实现。

对以下内容做个简单的提示:对任何普遍的点来说,特殊的点也会满足这个规律,用这个提示对一下内容可以自己进行推导

2.2、缩放变换

缩放变换是对物体进行比例的缩放:

可以通过矩阵的乘法来实现。(这里可以尝试一下手动推导)。

2.2、反射(对称)变换

简单来说就是绕着对称,对应unity中的spriteRender的组件来说就是flaction。

2.3、切变

这里实际就是y轴不变,或者x轴不变,然后进行比例变换。

2.4、旋转变换(默认逆时针绕原点)

推导一般可以看特殊点(左上和右下),这里可以展示一下课上老师体现的推导过程

这里可以看到用的是左上和右下,老师这里用的是(1,0)和(0,1),可以大胆推测一下,为什么unity重心点的边界是(0,1)呢?可能是为了方便做矩阵变换?可以一起讨论一下。

3、齐次坐标

3.1、为什么引入齐次坐标

首先我们得提到一个特殊的变换,平移变换。

我们通过上面描述的理论去对平移变换进行推导,发现并不能表现成向量*矩阵的形式,但是上述的线性变换是向量乘以矩阵的形式,又不希望将平移变换单独出来。因此就引入了齐次坐标。

3.2、齐次坐标概念

首先展示一下齐次坐标的形式:

通过形式可以看出最后为1是点为0向量。那么为什么呢?

实际上就是满足向量具有平移不变性,而点是唯一的,同样可以满足点和向量的操作。

可以对比以上操作进行推导。

那么是否有疑问呢?

其实我相信大多数人应该查过齐次坐标的作用是用来做仿射变换的,但是,什么是仿射变换?

怎么实现仿射变换?

关于这几个疑问我结合老师上课的观点来进行一下解释。

3.3、什么是仿射变换?

可以理解为:线性变换+平移变换。也就是说齐次坐标既可以用来计算上述的线性变换,又可以用来计算上述的平移变换。

3.4、怎么实现仿射变换?

这里是关于仿射变换的变换矩阵来实现的。可以使用齐次坐标进行计算来进行推导。

4、额外的复杂的变换

4.1、逆变换

上述所有的变换都是基于矩阵来实现的,那么矩阵存在逆矩阵,当然,变换也会存在逆变换,实际上可以理解为撤销变换。

4.2复杂的变换

1、简单变换组合(因此也是可以分解的)

2、变换的顺序也是很重要的(矩阵的乘法不满足交换律但是满足结合律)

写成矩阵的形式(连续引用不同的变换)

注意顺序的重要不然可能会出现下图的情况:

概念是互通的。

5、总结

主要是为投影变换埋下铺垫,将变换解释成矩阵的行为,埋下抽象某些概念的伏笔。

希望各位大佬可以互相讨论。小白感谢

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值