MickeyMiao

起点草甸

MickeyMiao

code is cheap, show me your prompt

51 篇文章 · 18 个分类 · 4 位朋友

向下滑动,出发 (或按 1-6 直达)

服务器小镇

家里小主机上的 Minecraft 生存服,白名单制。加入:QQ 群

状态
读取中…
在线
-
版本
-
已开服
-

每 10 分钟更新一次

关于雪松林

嗨,我是王思淼

图形渲染开发工程师 @ 小米。喜欢图形学、游戏和折腾服务器。

完整介绍 GitHub Bilibili Steam

回到森林 Esc 关闭

笔记GAMES101

GAMES101 第6讲 光栅化(深度缓冲)

深度缓冲

画家算法

画家算法(Painter's Algorithm): 从后往前绘制, 后绘制的像素会覆盖先绘制的像素

例如下图中, 从后往前绘制, 会先绘制远处的山脉, 再绘制草地, 草地会覆盖部分山脉的像素, 然后绘制树木, 树木会覆盖部分草地的像素, 也会覆盖部分山脉的像素:

但是画家算法有一个问题, 如果两个物体互相遮挡, 那么就会出现问题, 如下图所示:

深度缓冲(Z-Buffer)

深度缓冲(Z-Buffer): 为每个像素存储一个深度值, 当绘制一个像素时, 先检查该像素的深度值, 如果新像素的深度值小于深度缓冲中的深度值, 那么就更新深度缓冲中的深度值, 并绘制新像素

  • 在渲染过程中, 除了最终得出的结果的图象, 还会生成一个深度图, 用于记录每个像素所看到的几何物体的最浅的深度信息, 这个图象就是深度缓冲, 也叫深度图
  • 最终图象叫做Frame Buffer, 深度信息的图象叫做Depth Buffer, 两者同时生成

图形学常常假设相机在原点, 观察方向为 轴, 但是为了我们方便计算, 我们假设 的值始终为正值, 即 越大, 越远离相机, 越小, 越靠近相机

深度缓冲的算法如下:

  1. 初始化深度缓冲, 将所有像素的深度值设为无穷大(无穷远)
  2. 将所有三角形的像素绘制到深度缓冲中, 每次绘制一个像素时, 检查该像素的深度值
  3. 如果新像素的深度值小于深度缓冲中的深度值, 那么就更新深度缓冲中的深度值, 并绘制新像素

算法复杂度:

  • 假设每个三角形都会覆盖相同的常数个像素
  • 时间复杂度:

#GAMES101#计算机图形学

评论