当前位置: 首页 > 工具软件 > Literate > 使用案例 >

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

谷梁德容
2023-12-01

转载自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(老泰:老泰斗之缩写,他是谁就不用说了吧)的创造。该书作者MattGreg想必是他老人家的忠实信徒,也来一把“文学编程”.】

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;

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

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

转载于:https://www.cnblogs.com/guopenglx/archive/2011/07/18/2109053.html

 类似资料: