【图形学笔记】Lecture02&03 光栅化、抗锯齿、Z-buffer
Lecture02-Digital Drawing 数码绘画
- Drawing Machine:示波器、阴极射线管上显示光栅、栅格扫描
- 帧缓冲:用于光栅显示的存储器。
- LCD (Liquid Crystal Display) :液晶、Electrophoretic Display:电子墨水
Triangles - Fundamental Area Primitive 三角形——基本区域
为什么是三角形?
- 最基本的多边形:其他多边形可以剖分成三角形、适合优化
- 三角形有的一些独特性质:保证在一个平面上、内部是良定义的、在顶点上插值(重心插值)是良定义的
Rasterization 光栅化
Sampling 采样
- 可以通过周期性采样,来离散化一个函数。
光栅化最简单的栗子,就是判断每个像素的中心在不在三角形内部。然后这里给了个直线
当然它后面定义了一个向量
那么对于经过
Lecture03- Sampling, Aliasing, Antialiasing 采样、锯齿、抗锯齿
Artifacts due to sampling - “Aliasing” 采样产生的问题-混叠
- 锯齿、车轮效应(Wagon Wheel Effect)——实时采样、莫尔条纹(Moire)——欠采样
Antialiasing Idea: Filter Out High Frequencies Before Sampling 抗锯齿的方法:采样前过滤高频信号
先采样再模糊(x),先模糊再采样(√)
Frequency Space 频域
Fourier变换:把一个函数表示成
高频信号自然需要更高频的采样,而欠采样就会导致频率的失真,甚至在一些低频的采样,可能会无法区分两种不同频率的不同信号——也就是我们说的走样/失真(aliases),这也算是从频率的视角去看失真吧。
(注记:Fourier变换明明应该是时域和频域的变换,为什么这里又来个“空间域”?好像是说你可以把空间也看成时域。以及图像上看的话,中心的原点代表低频,外侧代表高频)
Filtering-Getting rid of certain frequency contents 滤波-去处某些特定频率
- 过滤低频信号(Edges),即高通滤波——提取边界(这是直观的,因为”边界“处意味着有一些突变,信号突变,自然是高频信号)
- 过滤高频信号(Blur),即低通滤波——模糊(那就是把变化大的信息抹去了)
滤波=卷积=平均,卷积定理(Convolution Theorem):空间域(时域)上的卷积=频域上的乘法,反过来,空间域的乘法=频域上的卷积。
上面那个
Sampling = Repeating Frequency Contents 采样=取重复频率的内容
所以从频域上看,采样(离散化)后的函数,相当于是把原来频域上的函数进行复制黏贴,而如果采样的频率太低(对应着
![
How Can We Reduce Aliasing Error?如何减少混叠误差?
- 1、提高采样率:更高的分辨率、帧缓冲区,但是会带来更高的花费
- 2、反走样(抗锯齿):移走/减少高频信号(即频域图上,距离原点较远的信号)。
- (注:课件上还具体说了,移走的是高于Nyquist频率的部分)
A Practical Pre-Filter 一个实用的预滤波器
一个
Antialiasing By Supersampling(MSAA)超采样
对于任何一个像素,认为它被划分成很多小的像素,对每个小像素采样再平均。
一些实现细节:
1、超采样的位置。2、有多个三角形。3、内存开销
Painter's Algorithm 油画家算法
好像就是说油画家画画,从远到近画,近的可以把远的覆盖。
一定程度上可以
Z-Buffer 深度缓冲
(这一部分在学校的课件放到了Lec5里,但我感觉放这里更合适?)
存储两个信息:
- 1、frame buffer存RGB信息。
- 2、depth buffer(z-buffer)存当前最小的深度信息。
for (each triangle T) for (each sample (x,y,z) in T) if (z < zbuffer[x,y]){// closest sample so far framebuffer[x,y] = rgb;// update color zbuffer[x,y] = z;// update z }else{ // do nothing, this sample is not closest }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律