最近在为之后找工作面试做准备,所以把大二学习的计算机图形学又拿出来重新学起来了,也推荐大家一起看闫大神的课!!!
然后笔记是在lengyueling大佬的版本上进行的修改,总体还是大佬的模板。
希望大家一起在图形学的路上越走越远!
图形学应用场景
-
电子游戏:
-
PBR:之狼
-
卡通渲染:无主之地
-
电影:黑客帝国
-
动画:疯狂动物城、冰雪奇缘
-
设计:概念图
-
可视化:虚拟现实
-
数码插画:模拟仿真
-
GUI图形用户接口
-
字体设计:矢量图
全局光照做的好不好影响游戏美术品质,同时体现在场景的亮度
图形学的技术挑战
光栅化(rasterization):
将三维空间中的几何形体显示在屏幕上
实时:30fps 否则被称为离线
曲线和网格(Curves and Meshes) :各种细分方法
光线追踪(ray tracing):动画电影广泛使用,但是速度较慢**(重点)**
目前使用游戏使用的是实时光线追踪
仿真和模拟(animation/simutatoin)
OpenGL、dx是图形学API不是图形学
计算机图形学与计算机视觉
- 图形学不是计算机视觉。
- 计算机视觉:猜测、预测、分析处理
- 计算机视觉是理解这个世界(图像识别),计算机图形学是创造这个世界(CG)
线性代数复习
图形学默认使用列向量,课程默认为右手系(DirectX为左手系)
点乘在图形学的应用
AB=|A||B|cosθ
- 点乘主要应用于求两个单位向量的夹角,
- 判定前后:A·B>0,代表B与A的夹角小于90度(同向),<0则大于90度小于180度(反向)
- 观察两个向量之间是同向、垂直还是反向,可以观察两个向量的接近,若两个向量的点乘接近1则离得很近,若接近0则离得很远
- 利用投影可将一个向量分解成两个(多个)向量和
叉乘在图形学的应用
- AxB=-BxA
- 叉乘的数值上=|A||B|sinθ
- 判定左右(内外)
- 若AxB为正则点A在点B在A左侧,若点P在点A、B、C内,则ABxAP,BCxBP,CAxCP结果相同则P在ABC内(判断点在三角形内部,后文会提及)
- 若任意一个结果不同则P在ABC外
- 定义坐标系
- 要求:单位向量、互相垂直(点乘为0且叉乘结果为另外一轴)
- 可以获得任意一个向量分解为多个投影
矩阵知识点
- (MxN)(NxP)=(MxP),M行N列的矩阵与N行P列的矩阵相乘会得到M行P列的矩阵
- 矩阵没有交换律,只有结合律
- 转置:(AB)T=BT AT,AB的转置等于B的转置乘A的转置
- 单位矩阵I(对角阵I):可以算出矩阵A-1(A逆),可以用于返回变换前的结果。(知识点:矩阵乘矩阵的逆矩阵等于单位矩阵
- 向量的点乘、叉乘都可以转换为矩阵相乘
- 点乘:A·B=ATB
- 叉乘:AxB=A*B
A*是对偶矩阵
概率论复习(用于路径追踪)
X:随机变量
pi一定是非负的,所有pi相加等于1
EX:数学期望
X~P(X):概率密度函数,概率的连续分布情况
变换
2D 变换
缩放
- X’=Sx
- Y=Sy
X轴翻转
- X’=-X
- Y’=Y
R-θ=RθT
齐次坐标
为了解决平移产生必须要用加法的问题,加入齐次坐标。
- 矩阵没有交换律:同时需要平移和线性变换的时候,需要先线性变换再平移
- 仿射变换=线性变换+平移
仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。
仿射变换是在几何上定义为两个向量空间之间的一个仿射变换或者仿射映射(来自拉丁语,affine,“和…相关”)由一个非奇异的线性变换(运用一次函数进行的变换)接上一个平移变换组成。
3D 变换
齐次坐标
3D点:(x,y,z,1)T
3D向量:(x,y,z,0)T
旋转向量与欧拉角
RXYZ(α,β,γ)=RX(α)Ry(β)Rz(γ)
利用右手螺旋定则
在三维坐标系中:
XxY=Z XxZ=-Y YxZ=X
因此RY(α)中为X或Y的转置
同时,去掉分别代表XYZ运算的行列即可变换为最基本的旋转式
罗德里格旋转公式
这是一种可以表示任意旋转后的向量
四元数解决了两个旋转角度中插值的问题,本课中不具体讲解