转载自PBRT阅读:第一章 1.1文学编程(Literate Programming)http://www.opengpu.org/bbs/forum.php?mod=viewthread&tid=4149&fromuid=4260

PBRT阅读:第一章:1.1文学编程(Literate Programming)

【题外话:这里只是记录我学习该书的体会,既不是直译,也不是意译,而是顺着作者的思路,把自己理解的东西再讲述出来,对于可能出现的误解会用原文说明。】

第一章介绍

关于渲染,有很多方式。大致有三类:

基于物理学的渲染(Physically based):着力于模拟现实。就是说,用物理学的原理搭建关于光和物质交互的模型,追求真实感是该类方法的首要任务。

交互式渲染(Interactive):为了高性能和低延迟而牺牲真实感的渲染(不用问,这是指市面上的游戏类软件)。

无照片真实感的渲染(Nonphotorealistc)。这是为艺术的自由表达而作的渲染。

该书所描述的pbrt是基于光线追踪算法的物理学渲染系统。其它相关的书籍只是介绍原理,算法,或许还夹杂些少许源代码。该书则不同,因为它带了一个完全能工作的完备的渲染系统。(正是这个原因,有很多人用这个系统为蓝本作研究,甚至有LexRender这样相当高级的系统出现)。

1.1 文学编程(Literate Programming)

【该书开篇讲了文学编程,这是本书的组织方法,其理念和用法贯穿全书,故不得不学。文学编程是软件老泰Donald Knuth(老泰:老泰斗之缩写,他是谁就不用说了吧)的创造。该书作者Matt和Greg想必是他老人家的忠实信徒,也来一把“文学编程”.】

Knuth老泰写Tex系统的时候,阐述了一个简单而具革命性的思想:程序更应该写给人读的,而不仅仅是给计算机的,名之为文学编程。该书就被作者号称为一部长长的文学程序(Literate program)。文学程序是用一种元语言(metalanguage)写成,该元语言把一种文档格式化语言(document formatting language, 例如TeX, HTML)和一种编程语言(例如C++)混合使用。它提供两种功能:1)把文章跟源程序混在一起,使得对程序的描述跟实际的源代码一样重要,这样可鼓励仔细的设计和文档编写。2)跟提交给编译器的方式相比,它提供给程序读者全然不同的展现方式,这样使得程序的描述逻缉性很强。每段代码都加以名字,称为片断(fragment).每个片断可以用名字引用其它片断。

举例说明:有下面一段程序:

void InitGlobals(void) {         num_marbles = 25.7;         shoe_size = 13;         dialectric = true;         my_senator = REPUBLICAN;

}

如果没有上下文的话,它很是费解。你得搜索整个程序来查看每个变量的定义和它们的目的。这种结构对编译器没有任何问题,而对读者而言,读者更希望看到每个变量的初始化代码能在靠近声明和使用它的地方单独表达出来。(有点绕口,原文:a human reader would much rather see the initialization code for each variable presented separately, near the code that actually declares and uses the variable).

在文学程序中,可以这样写:

<Function Definitions>=

void InitGlobals() {              <Initialize Global Variables  3>

}

(“3”是书上的页码)

这就是一个片断, 名字是<Function Definitions>, 它定义了InitGlobals()函数,并引用在第3页的另一个片断<Initialize Global Variables〉。

当我们引入全局变量shoe_size时,我们可以写:

<Initialize Global Variables〉=         shoe_size = 13;

当我们再引入全局变量directric时,我们可以写:

<Initialize Global Variables〉 +=

dialectric = true;

符号 +=(包括上面的“=”,原书是三条横线,因无法输入,用“=”代替)表示我们要对片断添加新的声明。

可以看出,我们可以把很复杂的函数化解成不同的逻辑部分,每一部分都很容易理解。(整部书都是按照这个步调有条不紊地,由简入繁地解释书中个个要点)。

PBRT阅读:第一章 1.1文学编程(Literate Programming)相关推荐

  1. [PBRT翻译] PBRT阅读:第一章 1.1文学编程(Literate Programming)

    转载自PBRT阅读:第一章 1.1文学编程(Literate Programming) http://www.opengpu.org/bbs/forum.php?mod=viewthread& ...

  2. java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程

    [第一章]Java多线程编程 一.进程与线程 多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行 线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖 ...

  3. python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象

    第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...

  4. 第一章: Vert.x 异步编程的基础知识

    第一章: Vert.x 异步编程的基础知识 翻译: 白石(https://github.com/wjw465150/Vert.x-Core-Manual) 构建反应式系统的第一步是采用异步编程.基于阻 ...

  5. 《Python核心编程》第二版第18页第一章练习 -Python核心编程答案-自己做的-

    <Python核心编程>第二版第18页第一章练习 这里列出的答案不是来自官方资源,是我自己做的练习,可能有误. 1.9 练习 1-1. 安装Python.请检查Python是否已经安装到你 ...

  6. 文艺编程 Literate Programming (原文中英文对照)

    转载自:http://legendsland.wordpress.com/2012/06/06/literate-programming-%E6%96%87%E8%89%BA%E7%BC%96%E7% ...

  7. 第一章:客户端网页编程简介

    1.企业应用计算的演变过程:主机/哑终端的集中计算模式.客户机/服务器计算模式.浏览器/服务器计算模式. 2.网页的基本组成:web应用程序.web服务器.客户端浏览器.HTTP网络协议. 3.发送到 ...

  8. 高红梅:第一章 ​​​​​​​第二节 文学创作与自我身份认同问题

    第二节   文学创作与自我身份认同问题 海明威身份意识的产生,不仅受到家庭.美国乃至西方文化氛围的影响,而且还与美国文学思潮以及海明威个人创作风格息息相关. 美国文学思潮与青年作家对自我的探寻 历经1 ...

  9. 第一章:你的编程入门了吗?养成良好的编程思维

    我今天看到一个问答:你什么时候觉得自己编程入门了? 我是一个有十年编程经验的程序员,使用过C++,c语言,python,php,Scala等开发语言,做过小程序,使用汉语编程语言中的神器易语言写过工具 ...

最新文章

  1. php隐式提交iframe,Laravel中通过IFrame来模拟页面异步提交
  2. 【MongoDB】NoSQL Manager for MongoDB 教程(基础篇)
  3. 【算法精讲】集成分类与随机森林
  4. chrome动态ip python_用Python爬虫爬取动态网页,附带完整代码,有错误欢迎指出!...
  5. python 示例_带有示例的Python列表remove()方法
  6. Linux下之使用简单3种创建文件的命令,并实现一个Html和JavaScript小程序
  7. Superior Scheduler:带你了解FusionInsight MRS的超级调度器
  8. mysql常用的备份命令有哪些_MySQL常用备份还原命令
  9. filter过滤器_Java过滤器Filter讲解(Java基础)
  10. mysql 大树据表update很慢
  11. Slowquery图形化显示MySQL慢日志工具
  12. 黑马程序员,黑马论坛---云2期,已就业45人,平均薪水6806【8月23日更新】
  13. 案例:微博传播引爆点
  14. php转foloat,PHP: Descrierea directivelor de bază ale php.ini - Manual
  15. 数据宝贝儿放云上,你放心么?
  16. xp系统本地连接服务器,xp系统本地连接受限制或无连接怎么办丨xp本地连接断开无法上网解决办法...
  17. java 小程序 自己学习
  18. CSS:设置边框和背景
  19. java中的直接内存
  20. 2021-2026年,全球MPO光纤连接器市场复合年增长率预计为23.2%

热门文章

  1. 针对传感网的数据管理系统结构有_这家公司掌握MEMS传感器核心制造工艺 华为优秀方案供应商认证+国产替代空间大...
  2. unity 2020 怎么写shader使其接受光照?_Shader从入门到跑路:阶段性自我小测2(屏幕后处理、替换渲染、双Pass渲染)...
  3. Jmeter 压力测试 - Http2.0工具下载慢解决思路-【问题篇】
  4. python实现杨辉三角_如何用Python实现杨辉三角和心
  5. AU实战操作之混音、降噪
  6. 猪脸识别,赢取30万大赛奖金
  7. 167. 两数之和 II - 输入有序数组
  8. 有什么软件可以测试游戏延迟,网络延迟怎么测试 玩游戏延迟高怎么解决!
  9. shell的变量的学习
  10. 6个经典Python项目让你快速具备独立开发能力