01计算机图形学概述
一、课程主题
1.Rasterization(光栅化):这部分后续还会讲述关于OpenGL和Shader相关的知识。
光栅化:把三维空间的几何形体显示在屏幕上
实时:每秒出现30幅画面,即每秒30帧(30fps)。如果不满足,则不称之为实时,称之为离线。
2.Curves and Meshes(曲线和曲面):几何相关的一些知识
包括:
曲线
曲面
简单曲面——通过细分获得复杂曲面
形状发生变化时,面如何变化,如何保持原有的拓扑结构
3.Ray Tracing(光线追踪)
会拓展一些相关知识,如路线追踪、表面建模、光线传播方法
Trade Off:慢,但是效果好
又快又好:实时光线追踪
4.Animation/Simulation(动画与模拟)
for example:物理模拟,如一块布随风摆动
二、计算机图形学和计算机视觉的不同处
模型->图像,是计算机图形学,通过渲染
图像->模型,是计算机视觉
模型->模型,是计算机图形学,(模型和模拟)
图像->图像,是计算机视觉(图片处理)
三、一些其他相关概念与知识
图形学三大方向:仿真、几何、渲染
图形学API:OpenGL、DirectX、Vulcan
视觉信息:合成与操作
好的画面标准->画面是否足够亮->体现渲染中的全局光照
渲染->计算光线传播方式
Graphical User Interfaces(GUI):图形用户接口,如windows的和mac的
02线性代数回顾
一、图形学依赖的知识
1.基础的数学知识:
线性代数
微积分
统计
2.基础的物理知识:
光学
力学
3.一些杂乱的知识:
信号处理
数值分析
4.一点美学
二、向量(Vectors)
基础概念:
向量长度
单位向量
向量加法
(平行四边形法)
(三角形法)
默认情况下向量写成列向量
点乘:
(投影)
这其中的知识点:
1.夹角可以通过此公式反推
2.当向量a和向量b都是单位向量时,有
在2D中的向量点乘公式:
在3D中的向量点乘公式
点乘的作用有:
1.找夹角
2.投影
3.判断向量是否接近(其中的应用有->镜面反射)
4.用于判断前与后的信息
若为正数,则方向一致
若为负数,则方向相反
若为0,则垂直
叉乘:
但是上图不完善,因为少了方向
判断方向可以使用:
1.右手坐标系
2.右手螺旋定则:
四个小指握拳的过程时旋转的过程。即从向量a旋转到向量b,其中旋转的角度就是向量之间的夹角
大拇指指向的方向就是垂于与a向量和b向量的向量的方向
右手系的一些运算:
其中:
(忽略我的画技哈哈哈哈)
叉乘满足分配律和结合律
OpenGL:左手系
Unity:左手系
叉乘的向量表示以及运算:
三维向量的拆分:
叉乘的作用:
1.判断左和右
向量a叉乘向量b
如果结果为正,则向量b在向量a的左边
如果结果为负,则向量b在向量a的左边
2.判定内和外
若不分顺时针和逆时针来走三角形,则全左或全右也可推出p在三角形ABC的内部
若上述三角形案例中叉乘为0,则称为Corner case(可以自行决定处理)
三、矩阵(Matrices)
基础概念:转置矩阵、对角矩阵、单位矩阵、矩阵的逆
提示:矩阵没有交换律
有用->矩阵乘以列向量
变换操作:旋转、对称等等
点乘用矩阵运算表示:
叉乘用矩阵运算表示:
其中A*不是伴随,也不是A乘以。是dual matrix(对偶矩阵)
03Transformation(变换)
主要内容:
1.旋转、缩放、切边
2.其次坐标(Homogeneous coordinates)
3.组合变换->形成新的变换
4.三维变换
Modeling
Viewing
一、2Dtransformation(二维变换):
缩放变换:
Scale transformation
对应变换和矩阵形式
反射:
Reflection Matrix
对应变换和矩阵形式
shear Matrix:切变
矩阵形式
旋转:
Rotation Matrix
线性变换:
Linear Transformation
对应表示和矩阵形式
二、Homogeneous coordinates(齐次坐标)
平移变换:
平移不是一种线性变换
那么是否有一种方法来表示所有的变换呢?->都变成矩阵乘以向量->引入齐次坐标
齐次坐标的表示:
其次坐标矩阵乘法:
二维点:加1
二维向量:加0,因为向量经过平移还是那个向量,不会改变
其次坐标的加减
向量+向量=向量
点-点=向量
点+向量=点
点+点=两点的中点
w不为1和0时,转换为其次坐标:除以w
仿射变换(Affine Transformations):
对应变换:
使用其次坐标后转成矩阵乘法形式:
用齐次坐标形式的矩阵相乘
用仿射变化做平移:最后一行永远是001,平移永远写在最后一列的头两个数上。左边是原来的线性变换
(Scale)缩放使用齐次坐标矩阵乘法:
(Rotation)旋转使用齐次坐标矩阵乘法:
(Translation)平移使用齐次坐标矩阵乘法:
使用齐次坐标的代价:引入额外的1。但是效率仍然好。
逆变换(Inverse Transform): 线代上正好是乘以逆矩阵
变换的组合(Composing Transforms)
目的效果:
如果先平移再做旋转:失败了,因为旋转是以坐标轴原点旋转的。如下:
如果先旋转,再平移:成功了。如下:
因为矩阵的乘法不满足交换律,所以先左乘A和先左乘B得到的效果是不一样的
矩阵没有交换律,但是有结合律。
可以先算右边的:符合逐一变换,好理解
也可以先算左边的
Decomposing Complex Transforms(变换的分解)
如何以特定的点(如c点)进行旋转
先把该点移动到原点,再做旋转,最后再移回去
矩阵写法,从右到左
三、三维变换(3DTransforms)
将w变成1,只要都除以w就可以
仿射变换:先线性变换再平移
三维比二维又多了一个维度
齐次坐标的矩阵乘法形式:
04Transformation Cont
旋转-c塔角度:变成矩阵的逆,但这时候也正好是转置(旋转的逆正好是转置)(也称为正交矩阵)
一、三维变换
齐次坐标
欧拉角:把三维旋转写成绕x,绕y,绕z。称为欧拉角
罗德里德斯旋转公式:角度阿尔法和轴n
二、Viewing transformation (观测变换
-View(视图)/Camera transformation
-Projection(投影)transformation
-Orthgraphic(正交)projection
-Perspective(透视)projection
-View(视图)/Camera transformation
什么是视图变换?
1.模型都拼好(model transformation
2.角度找好,布置相机(view transformation
3.投影(projection transfoamation
简称mvb变换
第一步:
e:相机位置
g:相机看的方向
t:相机上面(固定好哪个方向是相机上面,就可以锁住相机
第二步:
没有相对运动,拍出来的就永远一样
000是中心,相机永远向上是y,永远向-z看
通过平移和旋转等一系列操作让让摄像机成为上面的样子
数学方法:可以先求逆,更方便
总结
正交:
把z扔掉了(口头
(正式的说法:先平移,在缩放,变成 canonical(正则、规范、标准)cube
透视:近大远小
听不懂了,这一节。QAQ
05Rasterization1(Triangles)
一、Different raster displays
MVP
Model transformation(placing objects
View transformation(placing camera
Projection transformation
-Orthographic projection
-Perspective projection
Raster == screen in German
-Rasterize == drawing onto the screen
光栅化:把东西画在屏幕上的一个过程
Pixel's indices are from (0,.0) to (width-1, height-1)
Pixel(x,y) is centered at (x+0.5, y+0.5)
The screen covers range (0,0) to (width, height)
Next:Rastering Triangles into Pixels
不同的光栅设备
Oscilioscope Art
Flat Panel Displays
LCD
LED
Electrophoretic Display
二、Rasterizing a triangle
通过采样的方式来进行光栅化
判断点在不在三角形内部
会形成一个锯齿
后面要抗锯齿