请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 15768|回复: 17

PBRT阅读:第一章 1.1文学编程(Literate Programming) [复制链接]

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2011-3-3
积分
66268
发表于 2011-3-4 13:07:06 |显示全部楼层
本帖最后由 miaobucheng 于 2011-10-28 21:42 编辑


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;

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


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


1

查看全部评分

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2007-6-11
积分
28918
发表于 2011-3-4 13:15:50 |显示全部楼层
支持一个。
OpenGPU主力站点
http://www.opengpu.org/

个人博客
http://jedimaster.cnblogs.com/

个人微博
http://weibo.com/u/2348269374

友情提示

使用道具 举报

Rank: 1

注册时间
2011-3-4
积分
2
发表于 2011-3-4 23:14:52 |显示全部楼层
挺好理解的

使用道具 举报

版主

RenderGuy

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2010-11-4
积分
5849
发表于 2011-4-16 18:03:03 |显示全部楼层
一直都没读完Knuth的第一本。。。惭愧

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2009-11-7
积分
1889
发表于 2011-4-26 23:28:21 |显示全部楼层
怎么感觉这东东就是比较复杂的伪代码呀
I3D2013

使用道具 举报

Rank: 5Rank: 5

注册时间
2011-10-28
积分
66
发表于 2011-10-28 14:49:51 |显示全部楼层
无照片真实感的渲染(Nonphotorealistc),一般翻译成非真实感比较多

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

注册时间
2011-3-3
积分
66268
发表于 2011-10-28 21:31:05 |显示全部楼层
kinda 发表于 2011-10-28 14:49
无照片真实感的渲染(Nonphotorealistc),一般翻译成非真实感比较多

受教了,谢谢。

使用道具 举报

Rank: 16Rank: 16Rank: 16Rank: 16

注册时间
2011-8-13
积分
2223
发表于 2012-5-9 16:51:03 |显示全部楼层
怎么能翻译成‘文学程序’呢。。

使用道具 举报

Rank: 4

注册时间
2011-3-19
积分
35
发表于 2012-10-10 11:26:19 |显示全部楼层
楼主翻译的很好,谢谢楼主!

使用道具 举报

Rank: 5Rank: 5

注册时间
2011-12-18
积分
88
发表于 2012-11-14 14:06:03 |显示全部楼层
收藏并学习

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2010-12-17
积分
339
发表于 2012-11-14 15:32:34 |显示全部楼层
c interfaces and implementations 裡面也有用到這個方法
80 字节以内
不支持自定义 Discuz! 代码

使用道具 举报

Rank: 8Rank: 8

注册时间
2013-3-14
积分
102
发表于 2013-3-15 23:07:39 |显示全部楼层
文学编程在写书的时候,和研究技术的时候比较好。在实际项目开发的时候,不太实用,做项目最好的方式还是通过参数名和方法名来描述代码的作用。毕竟,能写代码的人本身对模块有一定基础,如果再写很多注释就显得很麻烦了。

使用道具 举报

Rank: 13Rank: 13Rank: 13Rank: 13

注册时间
2010-5-5
积分
1990
发表于 2013-5-8 17:06:43 |显示全部楼层
真强悍!领教了

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2009-10-18
积分
10171

会员荣誉勋章

发表于 2013-5-8 17:43:49 |显示全部楼层
叫 文艺编程 更贴切一点。
这个和文学无关,只是一种比较文艺的程序写法。

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2013-9-25
积分
476
发表于 2013-9-28 07:34:18 |显示全部楼层
楼主翻译的不错,学习了

使用道具 举报

Rank: 5Rank: 5

注册时间
2014-11-7
积分
58
发表于 2014-11-10 22:51:36 |显示全部楼层
我来反馈下,我觉得那个3的意思不是页码吧?

使用道具 举报

Rank: 4

注册时间
2017-3-9
积分
49
发表于 2017-3-10 15:20:44 |显示全部楼层
BrilliantLJW 发表于 2014-11-10 22:51
我来反馈下,我觉得那个3的意思不是页码吧?

这个3确实是页码的意思。书上有说
When a fragment is used inside another fragment,the page number on which it is first defined appears after the fragment name.


xinglianfly于2017-3-10 15:31补充以下内容:
感谢作者分享:loveliness:

使用道具 举报

Rank: 5Rank: 5

注册时间
2016-2-5
积分
56
发表于 2017-3-13 08:41:47 |显示全部楼层
我也在读,只是看英语还是感觉吃力,容易走神。楼主把自己的理解写出来感觉更能专注。学习了。

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-3-31 00:36 , Processed in 0.069114 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部