之前读的时候一直觉得红宝书是很艰涩难懂的,不如NEHE的教程简单。

后来才发觉是自己没基础,几番折腾之后也只能用OPENGL做些简单的东西。半年没写,连glBegin都给忘了。

图形学的大作业要求写个ZBuffer扫描线算法,虽然算法看的很明白,但到了要写的时候总还是很晕,不知道什么时候转换坐标,什么时候消隐。今天重看OPENGL编程指南,才发现这些早已在第一章就写得清清楚楚,心里暗悔早点看到便好了。又或者是,只有自己折腾过了,才觉得这一块看的更加明白了呢。关于图形学,我知道的还是太少太少了。

第一章其实内容不多,主要就是渲染管线

书中提到,如果读者刚开始涉足三维图形编程,可能会对接下来的内容感到吃力。读者现在可以跳过这部分内容,但在读完本书的每一章时,都应该重温一下图1-2。考虑到我当时很忙并且赶着把红宝书看完好去做毕设。所以这里我一定直接跳过了,只是后来读完每一章的时候,已经忘记去重温这张图了。好在毕设用到OPENGL不多,后来写图形学的作业就很吃力了。如果不是有前人的代码做参考,我想我也许到现在都还没写出来。

废话不说了,接下来逐个解释。

1. 显示列表 Display list

不管是像素还是几何图元,都要保存在显示列表里的。书上说还可以不保存,直接对数据进行处理,称作立即模式(immediate mode)。我到现在还没用过显示列表= =。第七章

2. 求值器 Evaluators

如果用的是参数化的曲线曲面,这里需要计算出顶点的坐标,因为所有的几何图元最终都要通过顶点来描述。它可以根据控制点产生表面法线,纹理坐标,颜色以及空间坐标值。第十二章

3. 基于顶点的操作 Per-vertex operations

就是把顶点变换为图元。原本我们的顶点都是世界坐标系中的,为了在屏幕中显示出来,需要将其转换为屏幕坐标。第三章

如果启用了纹理,它还会计算纹理坐标。如果启用光照,将会根据综合变换后的顶点、表面法线、光源位置、材料属性以及其他光照信息进行光照计算,产生最终的颜色值,这个在第五章讲述。

4. 图元装配 Primitive assembly

这里的主要内容是裁剪,消除位于半空间之外的那部分几何图元(如果你定义了其他裁切平面的话  第三章)。如果使用的是透视试图,这里还要进行透视除法的步骤。接下来是适口和深度操作(这里的深度操作说的不是消隐,其实我不知道它说的是什么。。囧)。图元装配生成完整的几何图元,也就是根据相关的颜色、深度(有时还有纹理坐标值以及和光栅化处理有关的一些指导信息)进行了变换和裁剪的顶点。

5. 像素操作 Pixel operations

首先,将来自系统内存的一个数组中的像素进行解包,从某种格式(像素的原始格式可能有很多种)解包为适当数量的数据成分。接着,这些数据被缩放、便宜,并根据一副像素图进行处理。处理结果先进行截取,然后写入到纹理内存或者发送到光栅化阶段。第八章

如果像素数据是从帧缓冲区中读取的,就对它们执行像素转换操作(缩放、偏移、映射和截取)。然后,这些结果被包装为一种适当的格式,并返回到系统内存的一个数组中。

6. 纹理装配 Texture assembly

我还没搞清楚是干嘛的,反正是对纹理图像进行一些处理。。第九章

7. 光栅化 Rasterization

光栅化就是把几何数据或数据像素转换成为片段fragment的过程。每个片段方块对应于帧缓冲区中的一个像素。这里要考虑直线的宽度、点的大小、抗锯齿等因素。

8. 片段操作  Per-fragment operations

在数据实际存储到帧缓冲区之前,将要执行一系列的操作。这些操作可能会修改甚至丢弃这些片段。所有这些操作都可以被启用或者禁用。

第一个可能执行的操作是纹理处理,将纹理单元texel应用到片段上。接着是雾计算、裁剪测试、alpha测试、模板测试和深度缓冲区测试(消隐被遮挡的表面)。随后执行的可能是混合、抖动、逻辑操作以及根据一位掩码的屏蔽操作。 第六章和第十章。

最后片段被绘制到适当的缓冲区,成为一个像素并到达它的最终栖息地。

OVER~

本文原创,转载请注明出处:

http://blog.163.com/sara_athena/ 或

http://www.cnblogs.com/luluathena/

转载于:https://www.cnblogs.com/luluathena/archive/2010/08/20/1804540.html

红宝书阅读笔记——OPENGL渲染管线相关推荐

  1. 红宝书阅读笔记(持续更新)

    今天是2021年8月15日 ,在自学的同时开始阅读前端相关的书籍,愿不断在学习中进步. 这一本是<JavaScript高级程序设计>(第四版),也俗称红宝书,第四版中加入了ES6. 下一本 ...

  2. 红宝书阅读笔记——缓冲区对象

    前面的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的.所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象 ...

  3. 红宝书背诵笔记 — 基础词

    红宝书基础词 基础词-Unit1 基础词-Unit2 基础词-Unit3 基础词-Unit4 基础词-Unit5 基础词-Unit6 基础词-Unit7 基础词-Unit8 基础词-Unit9 基础词 ...

  4. 红宝书背诵笔记 — 简单基础词语

    简单基础词 a开头的简单基础词 b开头的简单基础词 c开头的简单基础词 d开头的简单基础词 e开头的简单基础词 f开头的简单基础词 g开头的简单基础词 h开头的简单基础词 i开头的简单基础词 j开头的 ...

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

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

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

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

  7. JS红宝书·读书笔记

    JavaScript高级程序设计 花了半个多月的时间,终于又把"JS红宝书"又撸了一遍. 第一次读"JS红宝书"还是2015年初学JS的时候,那时候只是把语法部 ...

  8. [OpenGL红宝书]第一章 OpenGL概述

    第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向Op ...

  9. 红宝书读书笔记 第八章

    对象.类与面向对象编程 属性的类型 内部属性用两个中括号如[ [ Enumerable ] ] 开发者不能直接访问 数据属性 数据属性:数据属性包含一个保存数据值的位置.值会从这个位置读取,也会写入到 ...

最新文章

  1. Python 技术篇-利用pymouse库操作windows系统电脑实现鼠标指针移动、点击
  2. Linux Restart PHP
  3. firefox设置代理服务器
  4. 手机定位和什么有关?关机后的手机还能被定位吗?
  5. react学习(60)--ant design中getFieldDecorator
  6. linux内存锁定什么意思,Linux内存子系统——Locking Pages(内存锁定)
  7. GNOME下也是Alt+F2,输入gnome-terminal
  8. Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
  9. Spring(三)之自动装配、表达式
  10. C++中的XML配置文件编程经验
  11. python ljust函数,Python 字符串左对齐-Python 指定字符串左对齐-python ljust() 函数-python ljust() 函数用法-嗨客网...
  12. 阶段3 2.Spring_08.面向切面编程 AOP_4 spring基于XML的AOP-配置步骤
  13. 笔记本无法启用免费wifi
  14. sx1278lora模块的常见问题解答
  15. 野指针的成因_C语言
  16. 文献管理软件Zotero配置及使用
  17. 怎么用java做全民飞机大战_基于VC++和OpenCV实现的全民飞机大战游戏
  18. Ubuntu 22.04 LTS 入门安装配置优化、开发软件安装一条龙
  19. python网络编程能用来做什么_python网络编程是什么意思
  20. wps云文档回收站在哪_获得自己的云并回收数据

热门文章

  1. Pyotrch —— 优化器Optimizer(一)
  2. 吴恩达机器学习 —— 2.7 计算图
  3. 差分隐私中随机响应的抛硬币问题(LDP)
  4. Java出现No enclosing instance of type Test is accessible. Must qualify the allocation with an enclosin
  5. python3 ftp启动_python3利用pyftpdlib模块启动ftp服务
  6. php tp框架选择题,thinkPHP框架单元测试库tpunit用法示例
  7. python 找出图片中的差异点,python opencv对目录下图片进行去重的技巧
  8. 天锋w2019_天锋W2019叫板三星,三星欲哭无泪,网友称这也太逼真了!
  9. python size(0)_对x.view(x.size(0), -1)的一些理解
  10. oracle 讲师费用,20080929--ORACLE培训笔记未整理版(讲师:ORA-600)