DX11龙书学习笔记---准备工作

  • 1、交换链和页面翻转
  • 深度缓冲区
  • 多重采样

1、交换链和页面翻转

  • 为了避免在动画中出现闪烁,最好的做法是在一个离屏(off-screen)纹理中执行所有的动画帧绘制工作,这个离屏纹理称为后台缓冲区(back buffer)。当我们在后台缓冲区中完成给定帧的绘制工作后,便可以将后台缓冲区作为一个完整的帧显示在屏幕上;使用这种方法,用户不会察觉到帧的绘制过程,只会看到完整的帧。从理论上讲,将一帧显示到屏幕上所消耗的时间小于屏幕的垂直刷新时间。硬件会自动维护两个内置的纹理缓冲区来实现这一功能,这两个缓冲区分别称为前台缓冲区(front buffer)和后台缓冲区。前台缓冲区存储了当前显示在屏幕上的图像数据,而动画的下一帧会在后台缓冲区中执行绘制。当后台缓冲区的绘图工作完成之后,前后两个缓冲区的作用会发生翻转:后台缓冲区会变为前台缓冲区, 而前台缓冲区会变为后台缓冲区,为下一帧的绘制工作提前做准备。我们将前后缓冲区功能互换的行为称做呈现(presenting)。提交是一个运行速度很快的操作,因为它只是将前台缓冲区的指针和后台缓冲区的指针做了一个简单的交换。
  • 我们首先渲染缓冲区B,它是当前的后台缓冲区。一旦帧渲染完成,前后缓冲区的指针会相互交换,缓冲区B会变为前台缓冲区,而缓冲区A会变为新的后台缓冲区。之后,我们将在缓冲区A中进行下一帧的渲染。一旦帧渲染完成,前后缓冲区的指针会再次进行交换,缓冲区A会变为前台缓冲区,而缓冲区B会再次变为后台缓冲区。

深度缓冲区

  • 深度缓冲区(depth buffer)是一个不包含图像数据的纹理对象。在一定程度上,深度信息可以被认为是一种特殊的像素。常见的深度值范围在0.0到1.0之间,其中0.0表示离观察者最近的物体,1.0表示离观察者最远的物体。深度缓冲区中的每个元素与后台缓冲区中的每个像素一一对应(即,后台缓冲区的第ij个元素对应于深度缓冲区的第ij个元素)。所以,当后台缓冲区的分辨率为1280×1024时,在深度缓冲区中有1280×1024个深度元素。
  • 上图是一个简单的场景,其中一些物体挡住了它后面的一些物体的一部分区域。为了判定物体的哪些像素位于其他物体之前,Direct3D使用了一种称为深度缓存(depth
    buffering
    )或z缓存z-buffering)的技术。我们所要强调的是在使用深度缓存时,我们不必关心所绘物体的先后顺序。
  • 深度缓冲区用于为每个像素计算深度值和实现深度测试。深度测试通过比较像素深度来决定是否将该像素写入后台缓冲区的特定像素位置。只有离观察者最近的像素才会胜出,成为写入后台缓冲区的最终像素。这很容易理解,因为离观察者最近的像素会遮挡它后面的其他像素。

多重采样

  • 因为计算机显示器上的像素分辨率有限,所以当我们绘制一条任意直线时,该直线很难精确地显示在屏幕上。图4.4中的第一条直线说明了“阶梯”(aliasing,锯齿)效应,当使用像素矩阵近似地表示一条直线时就会出现这种现象,类似的锯齿也会发生在三角形的边缘上。
  • 我们可以看到,第一条直线带有明显的锯齿(当使用像素矩阵近似地表示一条直线时就会出现阶梯效应)。而第二条直线使用了抗锯齿技术,通过对一个像素周围的邻接像素进行采样得到该像素的最终颜色;这样可以形成一条较为平滑的直线,使阶梯效果得到缓解。
  • 当无法提高显示器分辨率或分辨率不够高时,我们可以使用抗锯齿(antialiasing)技术。其中的一种技术叫做超级采样(supersampling),它把后台缓冲和深度缓冲的大小提高到屏幕分辨率的4倍。3D场景会以这个更大的分辨率渲染到后台缓存中,当在屏幕上呈现后台缓冲时,后台缓冲会将4个像素的颜色取平均值后得到一个像素的最终颜色。从效果上来说,超级采样的工作原理就是以软件的方式提升分辨率。
    超级采样代价昂贵,因为它处理的像素数量和所需的内存数量增加为原来的4倍。Direct3D支持另一种称为多重采样(multisampling)的抗锯齿技术,它通过对一个像素的子像素进行采样计算出该像素的最终颜色,比超级采样节省资源。假如我们使用的是4X多重采样(每个像素采样4个邻接像素),多重采样仍然会使用屏幕分辨率4倍大小的后台缓冲和深度缓冲,但是,不像超级采样那样计算每个子像素的颜色,而是只计算像素中心颜色一次,然后基于子像素的可见性(基于子像素的深度/模板测试)和范围(子像素中心在多边形之外还是之内)共享颜色信息。下图展示了这样的一个例子。
  • 如图(a)所示,一个像素与多边形的边缘相交,像素中心的绿颜色存储在可见的三个子像素中,而第4个子像素没有被多边形覆盖,因此不会被更新为绿色,它仍保持为原来绘制的几何体颜色或Clear操作后的颜色。如图(b)所示,要获得最后的像素颜色,我们需要对4个子像素(3个绿色和一个白色)取平均值,获得淡绿色,通过这个操作,可以减弱多边形边缘的阶梯效果,实现更平滑的图像。

DX11龙书学习笔记---准备工作相关推荐

  1. DX11龙书学习笔记---渲染管线

    DX11龙书学习笔记---渲染管线 1.输入装配阶段 - 顶点 - 图元拓扑 - 点列表 - 线带 - 线列表 - 三角形带 - 三角形列表 - 带有邻接信息的图元 - 控制点面片列表 - 索引 2. ...

  2. 【DirectX 12 GJ的龙书学习笔记 一】前言与配置环境

    终于开始DirectX 12的学习了! 首先简单介绍下Direct3D 12: Direct3D 12是一个用于在各种Windows 10平台(Windows,移动设备和Xbox One)上使用现代图 ...

  3. 西瓜书学习笔记第2章(模型评估与选择)

    西瓜书学习笔记第2章(模型评估与选择) 2.1经验误差与过拟合 2.2评估方法 2.2.1留出法(hold-out) 2.2.2交叉验证法(cross validation) 2.2.3自助法(boo ...

  4. 周志华西瓜书学习笔记(一)

    周志华西瓜书学习笔记 第一章 绪论 数据处理分为三个阶段:收集,分析,预测. 一.基本概念 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能. Mitchell给出的更形式化的定义为 ...

  5. NILM(非侵入式电力负荷监测)学习笔记 —— 准备工作(一)配置环境NILMTK Toolkit

    安装Anaconda,Python,pycharm 我另一篇文章里面有介绍https://blog.csdn.net/wwb1990/article/details/103883775 安装NILMT ...

  6. 西瓜书--学习笔记1

    西瓜书–学习笔记1 第一章 1.分类和回归是监督学习的代表,而聚类是无监督学习的代表. 2.归纳和演绎是科学推理的两大基本手段. 归纳:从特殊到一般的"泛化"过程,即从具体的事实归 ...

  7. 《JavaScript高级程序设计(第四版)》红宝书学习笔记(2)(第四章:变量、作用域与内存)

    个人对第四版红宝书的学习笔记.不适合小白阅读.这是part2.持续更新,其他章节笔记看我主页. (记 * 的表示是ES6新增的知识点,记 ` 表示包含新知识点) 第四章:变量.作用域与内存 4.1 原 ...

  8. 《JavaScript高级程序设计(第四版)》红宝书学习笔记(1)

    个人对第四版红宝书的学习笔记.不适合小白阅读.这是part1,包含原书第二章(HTML中的Javascript)和第三章(语言基础).持续更新,其他章节笔记看我主页. (记 * 的表示是ES6新增的知 ...

  9. 阿龙的学习笔记---转载及精炼总结github仓库:cpp-backend-reference

    -> 转载自https://github.com/chankeh/cpp-backend-reference 突击复习常见题,要提前批了,之前的忘了不少,知识广度先再拓展一下.文章中的一些详细讲 ...

最新文章

  1. 太胖就会变秃,这回真的有依据了!日本学者发现肥胖会诱导毛囊衰竭 | Nature...
  2. css伪类focus的测试
  3. [NOIP2015提高组]运输计划
  4. 微信对账单 java_微信支付对账,你是如何处理的?
  5. 牛牛牛!干翻Sci-hub!
  6. android屏幕亮度权限,安卓支持将屏幕亮度设为0的方法。
  7. 【实用工具】windows/linux下时间统计函数
  8. 野村综合研究所李智慧:日本金融科技是制度先行而非技术先行
  9. 尼康单反AF自动对焦模式与AF区域模式详解
  10. 经典与科技碰撞之美!CGU 2018九段卡皇耀世登场
  11. 人脸识别权威评测和人脸识别技术现状
  12. 如何自定义Steam搜索设置
  13. 前端实习面试经验汇总
  14. rescale matlab,frft_matlab integrated algorithm about Frft, matla - CodeBus
  15. 定位“良心优品”,国民手机Z5能否让联想重回辉煌?
  16. 天水市师院计算机系好吗,天水师范学院专业排名及介绍 哪些专业最好
  17. 红米K40 面具root教程
  18. 迁移学习(Transfer Learning)的背景、历史
  19. 关于 continue 用法
  20. linux编译有线程的文件要加什么参数,Linux多线程实例,在编译中要加 -lpthread参数...

热门文章

  1. 什么是无线电波段?无线电波的传播方式有哪些?
  2. 微信小程序---swiper轮播图组件
  3. 论Web App、Hybrid App、Native App设计差异
  4. 【转载】《计算机教育》专题报道:从一个教育实例,看信息技术对教育的影响
  5. Android监听未接来电
  6. 魅族升级过程中出现android,魅族官宣魅族17升级Android11底层?结果魅友却怒了
  7. c语言编程兵书电子档,C++编程兵书 PDF扫描版[236.02MB]
  8. 技术管理职位的六大核心能力
  9. fzu2082 过路费
  10. 腾讯云账号怎么注销?教程来了