[PBRT翻译] PBRT阅读:第一章 1.1文学编程(Literate Programming)
转载自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;
符号 +=(包括上面的“=”,原书是三条横线,因无法输入,用“=”代替)表示我们要对片断添加新的声明。
可以看出,我们可以把很复杂的函数化解成不同的逻辑部分,每一部分都很容易理解。(整部书都是按照这个步调有条不紊地,由简入繁地解释书中个个要点)。
转载于:https://www.cnblogs.com/guopenglx/archive/2011/07/18/2109053.html
[PBRT翻译] PBRT阅读:第一章 1.1文学编程(Literate Programming)相关推荐
- PBRT阅读:第一章 1.1文学编程(Literate Programming)
转载自PBRT阅读:第一章 1.1文学编程(Literate Programming)http://www.opengpu.org/bbs/forum.php?mod=viewthread&t ...
- 第一章: Vert.x 异步编程的基础知识
第一章: Vert.x 异步编程的基础知识 翻译: 白石(https://github.com/wjw465150/Vert.x-Core-Manual) 构建反应式系统的第一步是采用异步编程.基于阻 ...
- java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程
[第一章]Java多线程编程 一.进程与线程 多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行 线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖 ...
- python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象
第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...
- 《Python核心编程》第二版第18页第一章练习 -Python核心编程答案-自己做的-
<Python核心编程>第二版第18页第一章练习 这里列出的答案不是来自官方资源,是我自己做的练习,可能有误. 1.9 练习 1-1. 安装Python.请检查Python是否已经安装到你 ...
- 第一章:客户端网页编程简介
1.企业应用计算的演变过程:主机/哑终端的集中计算模式.客户机/服务器计算模式.浏览器/服务器计算模式. 2.网页的基本组成:web应用程序.web服务器.客户端浏览器.HTTP网络协议. 3.发送到 ...
- 高红梅:第一章 第二节 文学创作与自我身份认同问题
第二节 文学创作与自我身份认同问题 海明威身份意识的产生,不仅受到家庭.美国乃至西方文化氛围的影响,而且还与美国文学思潮以及海明威个人创作风格息息相关. 美国文学思潮与青年作家对自我的探寻 历经1 ...
- 第一章:你的编程入门了吗?养成良好的编程思维
我今天看到一个问答:你什么时候觉得自己编程入门了? 我是一个有十年编程经验的程序员,使用过C++,c语言,python,php,Scala等开发语言,做过小程序,使用汉语编程语言中的神器易语言写过工具 ...
- Spring--官方文档部分翻译(第五章 面向Aspect的编程-AOP)
AOP通过提供程序设计的另一种思路扩展了OOP,OOP的核心元素是class,而AOP的核心是Aspect. Aspect使得关注点模块化. AOP是spring的核心模块.虽然LOC容器不依赖AOP ...
最新文章
- Spring Security 实战干货:玩转自定义登录
- Shiro实现认证_ini
- 利用Runtime类,来操作电脑关机。。
- idea console中文乱码_idea控制台tomcat中文乱码的处理方法
- LeetCode 489. 扫地机器人(DFS)
- JS Number对象常用函数(数字类型常用函数)
- WIn7虚拟机下运行H3CCloud出错问题
- 没有找到dllregisterserver输入点_Excel教程:框内打的几种输入方法,值得收藏
- 设置Mysql5.6允许外网访问详细流程
- Yii2修改默认布局
- 程序江湖:第五章 机会是一种困扰
- 【转载】斐讯K1、K2、K2P 大部分官方固件刷机、刷入Breed 辅助工具教程工具
- ins信息服务器,ins怎么登录服务器
- 5.8Gwifi信道
- python下载慢怎么办?
- 以太坊智能合约开发语言 - Solidity
- 在线画图工具-venn维恩图
- 量化投资学习——技术指标介绍
- 大数据采集技术与预处理
- 【无标题】 二手车汽车资质认证 二手车汽车资质认证
热门文章
- 联想笔记本win10无法启动vmware虚拟机
- 华硕TP500LB笔记本程序驱动下载
- C#联合Opencv 图像边缘检测
- ural 1102 Strange Dialog
- CD为什么采用44.1kHz采样频率的问题
- Worldwind配置文档
- 计算机网络硬核指南|网络设计核心思想
- 介质天线的设计原理_等离子体天线原理与设计.PDF
- (原創) 為什麼要學C/C++? (C/C++)
- McAfee VirusScan Enterprise 8.5i