Games101图形学学习笔记——图形学基础

图形学基础

基础数学:线性代数,几何
基础物理:力学,光学
其他:信号处理,数值分析

线性代数

Vector向量

在这里插入图片描述
向量的归一化
在这里插入图片描述
向量的加法(平行四边形法则,三角形法则)
在这里插入图片描述
向量的坐标表示
在这里插入图片描述

向量的点乘

在这里插入图片描述
向量点乘的一些属性
在这里插入图片描述
点乘的坐标运算
在这里插入图片描述
可以判断向量前与后的信息

点乘>0 同方向

点乘<0 反方向

向量的叉乘

在这里插入图片描述
叉乘的一些属性
在这里插入图片描述
叉乘的矩阵形式
在这里插入图片描述
作用:判定左和右
判定内与外

矩阵

线性变换是操纵空间的一种手段,他保持网格线平行且等距分布,并保持原点不动
矩阵是一种描述线性变换的语言,而矩阵向量乘法就是计算线性变换作用域给定向量的一种途径
矩阵的乘积
首先两个矩阵必须要可以相乘
(M x N)(N x P) = (M x P)
第一个矩阵的列==第二个矩阵的行。才能相乘
如:
第一个矩阵M行N列
第二个矩阵N行P列
得到M行P列的新矩阵

新矩阵a行b列的元素怎么得出来呢?
第一个矩阵a行和第二个矩阵b列做点积运算
在这里插入图片描述
矩阵的性质
在这里插入图片描述
矩阵乘向量
在这里插入图片描述
矩阵的转置
在这里插入图片描述
单位矩阵,矩阵的逆
在这里插入图片描述
向量的点乘,叉乘(矩阵形式)
在这里插入图片描述
向量的投影
在这里插入图片描述

Transform

Scale 缩放
在这里插入图片描述
Reflection 镜像变换
在这里插入图片描述
Shear 错切
在这里插入图片描述
Rotate(旋转)

如果用一个矩阵乘以输入可以得到输出的坐标,那么称这个变换叫线性变换
在这里插入图片描述
齐次坐标
在这里插入图片描述
给二维坐标增加一个维度,将线性变换也可以用矩阵形式表达
在这里插入图片描述
用齐次坐标可以将线性用矩阵统一表示
在这里插入图片描述
缺点:引入了额外的数字
矩阵不满足交换律
在这里插入图片描述
先旋转在平移写作 (T·R·向量) 从右往左写,矩阵的应用是从右到左的
三维空间中的线性变换也可以用齐次坐标表示
在这里插入图片描述
在这里插入图片描述

3D变换

3D变换相对于2D变换来说只是多增加了一个维度,可由2D变换举一反三得来
在这里插入图片描述
3D旋转在绕Y轴旋转时理解有些特殊
在这里插入图片描述
以xyz三个轴来说
X x Y = Z Y x Z = X X x Z = -Y
所以绕Y轴旋转的矩阵表现出来是转置的状态

罗德里格斯旋转公式

在三维空间内绕某一轴旋转,默认这个轴是过原点的

罗德里格斯旋转公式就是总结了绕任意过原点的轴旋转的公式
在这里插入图片描述
对于绕不过原点的轴旋转,我们可以将其拆分为

  • 将旋转轴平移到原点
  • 绕轴旋转
  • 将旋转后的模型平移回去

MVP变换:模型,视图,投影变换

视图/相机变换

图形学的最终目的是为了将三维中的物体渲染成二维里的图像

在现实生活中如何照一张照片?

  • 找个好地方摆pose(Model变换)
  • 把相机放个好角度(View变换)
  • 按快门(Projection变换)
    在这里插入图片描述
    View变换–如何摆放相机的角度

决定相机的位置
决定相机看向的方向
决定相机头朝上的方向
在这里插入图片描述
规定相机永远在(0,0,0),沿着-Z看
变化的永远是其他物体

所以要先把摄像机归到原点

平移摄像机至(0,0,0)
将相机lookat的方向旋转到-z
旋转相机头朝上的方向到Y
在这里插入图片描述
第一步的平移可以简单的写成下图Tview
在这里插入图片描述
但是要将任意向量旋转到轴上比较难写(也就是第2步和第三步)

但是将轴(如X轴(1,0,0))旋转到任意向量比较好写

所以我们先求将X轴旋转到任意向量的矩阵,之后将该矩阵求逆,即可得到任意向量旋转到轴的矩阵Rview

Rview x Tview = Mview

Mview即为视图变换,将Mview应用到相机,相机归零,同时也需要将Mview应用到其他所有物体,让物体和相机的相对位置保持不变

正交投影和透视投影

区别:是否有近大远小的性质

正交投影

满足近大远小的性质

先将相机归零lookat -Z轴

对于二维投影来说,直接把Z轴坐标舍弃,就能得到物体在xy平面上的投影

要把得到的图像平移并且缩放到[-1,1]²中,方便之后的计算
对于正交投影来说,视口是个[l,r][b,t][f,n]的长方体,想让他变成[-1,1]³中的话只需要

  • 先将立方体的中心平移到原点
  • 在将立方体缩放到[-1,1]³中

首先要找到立方体的中心点,也就是
在这里插入图片描述
将边长r-l、t-b、n-f缩放到长度2

所以正交投影矩阵如下
在这里插入图片描述
(此时物体肯定会被拉伸,在之后的视口操作中会恢复拉伸)
在这里插入图片描述

透视投影

传统的欧式几何是在同一平面内生效的法则
对于不同平面就会造成照片中近大远小的情况

如何做透视投影呢?
在这里插入图片描述
老师的方法是,先将Frustum远平面及远平面到近平面之间的所有平面挤压到近平面大小,

变成Cuboid的样子,然后做一次正交投影

那么如何做挤压呢?

  • 对于除近平面外的任意一个点,通过挤压后该点的高度y要变成和近平面一样的y’
  • 从侧面看Frustum的话,如下图,可以形成两个相似三角形,即可得出y‘=(n/z)y
  • 同理x’=(n/z)x

通过上面推导出来的两个公式可得,对于任意一点(x,y,z,1)T 可得
这里为了方便书写,用T来表示转置矩阵,下文同
在这里插入图片描述
将这个点同时乘z得
在这里插入图片描述
(齐次坐标同时乘k(k!=0),还得到相同的点)

  • 所以我们推导出了变化后的点的一部分
    就是
    在这里插入图片描述
  • 那么一个矩阵乘以任意一点(x,y,z,1)T得到上图,我们就可以推导出这个矩阵的一部分了
  • 矩阵的一部分如下图
    在这里插入图片描述
    想补全这个矩阵,需要用到两条已知的性质
  1. 近平面的点不会发生变化
  2. 远平面的点z的值不会发生变化
    在这里插入图片描述
  • 对于近平面上的点来说,他的z值就是n
    见下图
    在这里插入图片描述
    由性质1可得

对于近平面上的点(x,y,n,1)T经过矩阵变换后该点还为(x,y,n,1)T,同时乘n后得(nx,ny,n²,n)T

所以当z等于n时,也就是说近平面的点通过矩阵运算后变为(nx,ny,n²,n)T
在这里插入图片描述
所以矩阵第三行乘以(x,y,n,1)T= n²

可得第三行前两个数一定为0,即(0,0,A,B)
在这里插入图片描述
可得

  1. An+B=n²
    由性质2可得
    选一远平面上的点x=0,y=0,即中间点(0,0,f,1)T,经矩阵变化后还是中间点(0,0,f,1)T,同时乘f后得(0,0,f²,f)T
    即(0,0,A,B)(0,0,f,1)T=(0,0,f²,f)T
    可得

  2. Af+B=f²
    联立1、2得
    A=n+f
    B=-nf
    至此可解出Mpersp -> ortho
    在这里插入图片描述
    所以对于空间中任意一点进行透视变换可以通过如下公式解出
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值