跟着闫令琪老师的课程学习,总结自己学习到的知识点

课程网址GAMES101

B站课程地址GAMES101

课程资料百度网盘【提取码:0000】

计算机图形学概述

计算机图形学是一门将模型转化到屏幕上图像的一门基础学科,主要分为:Rasterization(光栅化)、Curves and Meshes(几何表示)、Ray Trancing(光线追踪)、Animation/Simulation(动画和模拟)

图形学与计算机视觉的简单界限:

(1) 计算机视觉是将屏幕上的图片转化为模型的过程;

(2) 计算机图形学是一门将模型转化到屏幕上图像的一门基础学科。

每个类别的知识框架如下图:

Rasterization(光栅化)

点乘和叉乘

Dot Multiplication

点乘在图形学的应用

(1) 求两个向量之间的夹角:

$$\cos(\theta) = \frac{(\vec{a} \cdot \vec{b})}{\lVert a \lVert \lVert b \lVert}$$

可以判断两个向量的距离、分向量与判断向量前后



(2) 投影

一个向量在另一个向量上的投影

Cross Product

[1] 右手坐标系



右手坐标系

叉乘在图形学中的应用

(1) 判断一个向量在另一个向量的左右,叉乘为正(与右手方向一致),则为目标在自己右方,反之亦然;

(2) 在性质(1)的基础上,如果一个点在包围他的所有线的同一侧,那么可以说明该点在这个图形内,反之亦然。

矩阵

矩阵转置与逆

(1) 矩阵A、B乘积的转置等于B的转置矩阵乘A的转置矩阵

\[(AB)^T=B^TA^T
\]

(2) 矩阵AB的逆等于B的逆乘A的逆

\[(AB)^{-1} = B^{-1}A^{-1}
\]

基础变换(二维)

三维变化与二维变换矩阵类似

齐次坐标下的基础变换

Scale:

\[S(s_x,s_y) =\begin{pmatrix}
s_x &0 &0\\
0 & s_y & 0 \\
0&0&1
\end{pmatrix}\]

Rotation:

\[R(\alpha) = \begin{pmatrix}
\cos\alpha& - \sin\alpha & 0 \\
\sin\alpha & \cos \alpha &0 \\
0&0&1
\end{pmatrix}\]

Translation:

\[T(t_x,t_y)=\begin{pmatrix}
1 & 0 & t_x \\
0 &1& t_y\\
0 &0& 1
\end{pmatrix}\]

组合变换(Compositon Transform)

矩阵变换把先变化的矩阵放到右边:矩阵运算是从右向左

四元数与旋转公式

四元数

留个坑,下周再填

罗德里格斯旋转公式

Rodrigue's Rotation Formula: Raotation by angle \(\alpha\) around axis \(\vec{n}\)

\[R(\vec{n},\alpha)=cos(\alpha)I+(1-cos(\alpha))nn^{T}+\sin(\alpha)
\begin{matrix} \underbrace{
\begin{pmatrix}
0 & -n_z & n_y \\
n_z & 0 & -n_x \\
-n_y & n_x & 0
\end{pmatrix}
} \\ N\end{matrix}\]

In the formula

I :Identity matrix

最后乘积的结果是一个3*3的矩阵

MVP变换

Model Transformation

引用博客:MVP变换

对模型进行模型变换时,需要注意坐标系是在世界坐标系原点。当绕模型中心进行变换时,首先要将模型的中心点移动到世界坐标系的原点,之后在进行模型变换,之后移回到原来的位置。

矩阵描述为:$$M=M_t^{-1} M_r M_s M_t$$

View/Camera Transformation

这个过程是将确定相机的位置:将相机的位置通过下面的过程移动到固定的点和方向。

(1) 相机的位置固定在世界坐标系的原点: \(\vec{e}\)

(2) 相机的朝向 \(-\vec{Z}\): \(\hat{g}\)

(3) 相机的向上方向\(\vec Y\): \(\hat t\)

基于上述过程,要求视图变换矩阵\(M_{view}\)分别求相机的平移矩阵\(T_{view}\)、旋转矩阵\(R_{view}\)

\[T_{view} = \begin{bmatrix}
1 & 0 & 0 & -x_{\vec{e}} \\
0 & 1 & 0 & -y_{\vec{e}} \\
0 & 0 & 1 & -z_{\vec{e}} \\
0 & 0 & 0 & 1
\end{bmatrix}\]

求旋转矩阵时,直接求相机旋转到原点的矩阵不容易求解,但求原点到相机位置的旋转矩阵容易求。

所以先求原点到相机的旋转矩阵:Z To \(-\hat{g}\)、Y To \(\hat{t}\)、最后保证\(\vec{X}\) To \((\hat g \times \hat t)\) 朝向的方向,原因是保证符合右手坐标系。

\[R_{view}^{-1}=\begin{bmatrix}
x_{\hat{g} \times \hat{t}}&x_{t}&x_{-g}&0\\
y_{\hat{g} \times \hat{t}}&x_{t}&y_{-g}&0\\
z_{\hat{g} \times \hat{t}}&x_{t}&z_{-g}&0\\
0&0&0&1
\end{bmatrix}\]

因为\(R_{view}^{-1}\)是正交矩阵,所以逆矩阵和旋转矩阵相同。

\[R_{view} =\begin{bmatrix}
x_{\hat{g} \times \hat{t}}&y_{\hat{g} \times \hat{t}}&z_{\hat{g} \times \hat{t}}&0\\
x_{t}&y_{t}&z_{t}&0\\
x_{-g}&y_{-g}&z_{-g}&0\\
0&0&0&1
\end{bmatrix}\]

所以

\[M_{view} = R_{view} T_{view}=
\begin{bmatrix}
x_{\hat{g} \times \hat{t}}&y_{\hat{g} \times \hat{t}}&z_{\hat{g} \times \hat{t}}&0\\
x_{t}&y_{t}&z_{t}&0\\
x_{-g}&y_{-g}&z_{-g}&0\\
0&0&0&1
\end{bmatrix}

\begin{bmatrix}
1 & 0 & 0 & -x_{\vec{e}} \\
0 & 1 & 0 & -y_{\vec{e}} \\
0 & 0 & 1 & -z_{\vec{e}} \\
0 & 0 & 0 & 1
\end{bmatrix}\]

Projection Transformation

个人理解投影变换的终极目的是让物体挤压在一个单位大小的平面(空间)内。原因先挖个坑。

Orthographic Projection

简单理解就是将物体的忽略z坐标,将模型通过Scale To [-1,-1]^2平面内。

真正的操作:

(1) 移动模型的位置到原点

(2) 缩放模型到空间[-1,1]^3中

Perspective Projection

正视投影的光线可以看成是一个立方体,如上图。透视投影的光线可以看成一个视锥,如下图。

透视变换可以分为两个步骤进行:

(1) 将视锥挤压到立方体内\(M_{persp->ortho}\)

(2) 将挤压后的视锥进行正视投影变换$M_{ortho}

挤压时的变换矩阵\(M_{persp->ortho}=\begin{bmatrix}
n&0&0&0\\
0&n&0&0\\
0&0&n+f&-nf\\
0 & 0&1&0
\end{bmatrix}\)

所以投影变换矩阵

\[M_{proj}=M_{ortho}M_{persp->ortho}
\]

光栅化

Viewport Transform(视口变换)

将经过MVP变换后得到的单位空间模型变换到屏幕上,屏幕左边是左下角为原点。



所以视口变换的矩阵

\[M_{viewport}=\begin{pmatrix}
\frac{width}{2}&0&0&\frac{width}{2}\\
0& \frac{height}{2}&0&\frac{height}{2}\\
0&0&1&0\\
0&0&0&1
\end{pmatrix}\]

Rasterization:Draw to Raster Displays

主要是将已经经过视口变换的模型画在屏幕空间上。

主要过程有:

(1) 采样

(2) 判断像素中心的位置与三角形的关系

采样

因为屏幕空间本身分辨率已经给出,所以像素点的数量也已经确认了,但是对我们可以通过以下方法提高效率,将可能有用的像素点选取出来:

1.Bounding Box

2.Incremental Triangle Traversal

判断像素中心的位置与三角形的关系

主要应用的原理是利用向量的叉乘判断点是否在三角形内。

伪代码如下

for(int x =0 ;x<xmax;x++)
for(int y = 0;y<ymax;y++)
image[x][y]=inside(tri,x+0.5,y+0.5)

反走样与深度缓冲

Artifacts(瑕疵) in Computer Graphics

产生Artifacts的分类和原因

(1) Jaggies(Staircase Pattern)

原因:空间采样产生的锯齿

(2) Mpire

原因:图片欠采样

(3) Wagon Wheel Effect

原因:时间上采样产生

解决办法

(1) 提高采样率:不实用

(2) 反走样

反走样

反锯齿的思路是先模糊,后采样,顺序不可以调换。

走样的原因:采样频率满足奈奎斯特采样定律,即采样频率高于二倍的最高频率。

滤波

频率图:越靠近中心点,表示的频率越低

滤波器的种类大致分为四类:

(1) 低通滤波:应用的效果是模糊

(2) 高通滤波:应用效果是提取边缘信息

(3) 带通滤波:也可以绘制出图像的边缘信息

卷积定理

时域卷积、频域相乘

时域卷积,频率图向两边拓展。

MSAA

通过MSAA方法可以首先模糊的效果。

步骤如下:

(1) 将每个像素点再进行细分

(2) 判断一个像素点里有几个细分的点在三角形内

(3) 将像素点根据在三角星内部细分点不同程度的着色,表示已经模糊。

上述过程的流程图如下:





上述过程在频率上的过程相当于低通滤波

Z-Buffer深度缓冲

每个像素都有一个z值代表像素点的深度、z值越大,说明该点越远。

Z-Buffer 算法伪代码

Initalize depth buffer to \(\infty\)

for(each trangle T)
for(each sample(x,y,z) in T)
if(z<zbuffer[x,y]) //closeet samnple so far
zbuffer[x,y]=z; //update color
framebuffer[x,y]=rgb; //update depth

总结

本周主要是完成光栅化的过程。其中比较重要的几个知识点:向量点乘和叉乘的几何意义、齐次坐标系下的矩阵变换、MVP变换、视口变换、光栅化、反走样、Z-Buffrer深度缓冲等等基础概念。

【Notes】现代图形学入门_01的更多相关文章

  1. 【Notes】现代图形学入门_02

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 光栅化 着色(Shading) 在图形学中,着色的定义可 ...

  2. 图形学入门(3)——区域填充算法(region filling)

    继续图形学之旅,我们已经解决了如何画线和画圆的问题,接下来要解决的是,如何往一个区域内填充颜色?对一个像素填充颜色只需调用SetPixel之类的函数就行了,所以这个问题其实就是:如何找到一个区域内的所 ...

  3. 图形学入门(1)——直线生成算法(DDA和Bresenham)

    开一个新坑,记录从零开始学习图形学的过程,现在还是个正在学习的萌新,写的不好请见谅. 首先从最基础的直线生成算法开始,当我们要在屏幕上画一条直线时,由于屏幕由一个个像素组成,所以实际上计算机显示的直线 ...

  4. 64 计算机图形学入门(1)——OpenGL环境配置与图形流水线(图像管线)

    0 引言 最近想学一下计算机图形学方面的知识,原因如下.目前本人接触了数字图像处理(opencv)以及点云处理(PCL)方面的知识,对从图像和点云中提取特征信息,并将特征转化为底层/中层语义信息有了一 ...

  5. 【Notes_2】现代图形学入门——向量与线性代数

    向量与线性代数 点乘和叉乘 Dot Multiplication 点乘在图形学的应用 (1) 求两个向量之间的夹角: $$\cos(\theta) = \frac{(\vec{a} \cdot \ve ...

  6. 【Notes_1】现代图形学入门——计算机图形学概述

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  7. 【Notes_8】现代图形学入门——几何(基本表示方法、曲线与曲面)

    几何 几何表示 隐式表示 不给出点的坐标,给数学表达式 优点 可以很容易找到点与几何之间的关系 缺点 找某特定的点很难 更多的隐式表示方法 Constructive Solid Geometry .D ...

  8. 《Shader入门精要》中MVP变换的Projection矩阵与《GAMES101图形学入门》中的区别

    game101的透视投影的投影矩阵是这样的 正交投影是这样的 而shader入门精要的透视投影矩阵是这样子 正交投影矩阵是这样子 game101的透视投影是这样得到的 而正交投影的时候并没有假设中心点 ...

  9. Spring入门_01

    <bean id="userAction" class="com.umgsai.spring.UserAction"> <property n ...

随机推荐

  1. .net core 和 WPF 开发升讯威在线客服与营销系统:使用线程安全的 BlockingCollection 实现高性能的数据处理

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...

  2. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

  3. AYIT-2020 609暑假集训第一周周赛题 A - A计划

    可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下 ...

  4. AtCoder Beginner Contest 188 C - ABC Tournament (模拟)

    题意:有\(2^n\)个人站成一排比赛,刚开始每个人都和自己右边的人进行比赛,赢得人晋级下一轮(下标的小的在前面),不断重复这个过程,问最后拿到第二名的人的编号. 题解:根据题意,可以用vector直 ...

  5. codeforces578C. Weakness and Poorness

    time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...

  6. 3.PowerShell DSC核心概念

    PowerShell DSC有三个核心概念 配置 配置是声明性的PowerShell 脚本,用于定义和配置资源实例. DSC 配置是幂等的. 资源 资源是 DSC 的"实现器"部分 ...

  7. Python进阶丨如何创建你的第一个Python元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类. Python元类设置类的行为和规则.元类有助于修改类的实例,并且相当复杂,是Python编程的高级功能之一. ...

  8. Linux运维博客大全

    系统 U盘安装Linux详细步骤_hanxh7的博客-CSDN博客_u盘安装linux 使用U盘安装linux系统 - lwenhao - OSCHINA 各厂商服务器存储默认管理口登录信息(默认IP ...

  9. Kubernets二进制安装(3)之准备签发证书环境

    1.在mfyxw50机器上分别下载如下几个文件:cfssl.cfssl-json.cfssl-certinfo cfssl下载连接地址: https://pkg.cfssl.org/R1.2/cfss ...

  10. kubernetes进阶(六)k8s平滑升级

    当我们遇到K8S有漏洞的时候,或者为了满足需求,有时候可能会需要升级或者降级版本, 为了减少对业务的影响,尽量选择在业务低谷的时候来升级: 首先准备好文件:我这里选择的是内网文件服务器上下载的,请自行 ...