GPU 编程与 CG 语言之阳春白雪下里巴人
康玉之
kang_yu_zhi@yahoo.cn
半山工作室
2009 年 9 月
1
半山工作室出品
题 目 GPU 编程与 CG 语言之阳春白雪下里巴人
作者姓名: 康玉之
专 业:计算机科学与技术 研究方向:多媒体与图形学
邮 箱:kang_yu_zhi@yahoo.cn
书籍报告提交日期 2009 年 9 月
2
独 创 性 声 明
本人声明所呈交的书籍是我个人在学习和研究工作中取得的研究成果。尽我
所知,除了文中特别加以标注和致谢的地方外,书中中不包含其他人已经发表或
撰写过的研究成果。
签名: 日期:
关于本书使用授权的说明
任何人和组织有权保留本书的复印件,允许本书被查阅和借阅;任何人或组
织可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论
文。
签名: 日期:
3
序
26 年前,江汉平原的一个农家女人在身边无人的情况下生下了一名男婴,
有人看到后叫来了男孩的外婆,外婆剪断了脐带。起初很多人都以为会是一个女
孩,都劝她打掉这个孩子,而她还是坚持生了下来。
男孩 4 岁时,由于家里忙没有功夫照看,于是女人用一卷毯子裹着他去学校
报名读书,说他已经 7 岁了。
男孩 17 岁那年,考上了武汉大学。爸爸妈妈一起送他到武汉读书,爸爸妈
妈还很有力气,扛着几十斤的行李很轻松,男孩那个时候不知道麦当劳,不知道
电脑如何开机,不知道什么叫上网。他们对男孩说,要好好读书,多学东西,和
同学好好相处,到了大三可以找女朋友。
5 年前,他来到了北京读研。爸爸妈妈一起送他到北京,那个时候他们头发
还没有完全白,扛着行李也觉得有点吃力了,到颐和园玩之前先带上水、方便面
和几个馒头。他们对男孩说,等他毕业时,再来北京玩,要慢慢适应北方的天气,
多喝水,用菊花和甘草泡水喝,要注意穿衣,不要让人瞧不起。
2 年前,他毕业了,在一家研究所找了一份工作,拿到了北京户口,爸爸妈
妈来北京玩了一次,打算一家人在北京过年,他们的头发白了不少,拿着行李很
辛苦,行李里面是吃的、锅、中草药、被子等。他们说,你要做一个好人,亲戚
有事情,你要帮忙,不要骄傲,要攒钱买房子,准备结婚。
你们赐予我生命,一直坚持要我和姐姐都上大学。对于一个普通的家庭而言,
同时负担两个孩子上大学,是一件多么艰难的事情!
二十多年过去有如瞬刹的流水,感谢你们,我的父亲母亲。
4
前言
在我读研期间,对国内的研究风气经历了从期待、到失望的过程。原因在于,
工程化的迹象太过明显,我的观点并不排斥工程化,但是以研究的名义,行工程
化之实,并将工程化中根深蒂固的“急功近利”带到整个过程中,最后不得不在
匆忙中以“略可充数的软件”和“流于表面的技术论文,粉饰以复杂深奥的术语
和图表”来结尾,这实在是一种悲哀。对于广大的研究人员和学生而言,已经是
一种无奈。
很多人都说,这是教授的错,也有很多人都说,这是学生的错,学风不正!
我最开始也这么认为,随着所见愈多,却又困惑。其实大部分的教授都是希望有
一番作为的,也是希望可以严格要求学生的,但是现在的大趋势是“权力决定学
术”以及“钻营决定利益”,于是很少有人可以在“所有人都进行利益争食”时,
还静心研究,实际上,就算静心研究,也没有这个条件。研究过程需要经费进行
保证,而不去钻营,不去附和哪些狗屁不懂的人,就没有办法拿到经费。大量的
课题原本应该从实际需求中提炼出来的,但随着行政体制的流转,最后演变成为
了“媚上”和“附和”而进行的选美比赛。而申请材料的撰写目标,也变成了为
了好看和吸引眼球而组建的“花哨”课题。
除此之外,研究人员难!很多研究工作需要依靠博士,但是中国博士的待
遇低,前途未卜是众所周知的。一个花哨的课题,加上一个每天想着结婚、吃饭
的穷博士,结果是可想而知的。
我工作之后发现,与学校的科研情况相比,社会上的 IT 混乱情况有过之
而无不及。刚工作初,曾在一次很大的项目验收中听到这么一句话“软件鉴定会
就是软件追悼会”。再加上国人不重基础研究,在我工作之初,一个很大的苦恼
是,很多人都觉得计算机图形学不属于计算机科学,他们认为计算机图形学只是
“使用软件去建模,是美工”,当有人发现我从本科到研究生都是计算机系的学
生时,还非常夸张的表达了他们的惊讶。更有一个领导对我说“计算机图形学是
一门很小的学科……”,她似乎觉得看过人月神话、软件工程之类的书,就是大
牛了,才是真正的计算机科学。
5
这些情况让我困惑了很久,我的师兄师弟师姐师妹,目前还在计算机图形学
领域的人,已经屈指可数。回想这 5 年来的所经所历,得出的结论是:中国的科
学研究已然被功利化、制度化。
被功利化的学术,失去了方向,变得鼠目寸光,无法容忍长时间的基础积累,
一味幻想空中楼阁式的成功。是呀,没有学术的成功,哪有领奖的资格,哪有白
花花的银子?我坚决认为,中国必然存在很多像爱迪生一样的天才,但是中国没
有一个上位者可以容忍一千次的失败,所以中国的爱迪生无法发明电灯,也无法
用智慧照亮别人和自己!
被制度化的学术失去了灵性和创造性,而奴性则越来越重!处于这种氛围的
人会从最初的挣扎到慢慢的习惯,到最后成了坚定的捍卫者,因为他们已然失去
了活力,已然要依赖这种制度而生存,就好比长在大树上的寄生植物一般。这些
人每天说着“假大空”的“真善美”,创造性实际上变成了嘴巴上的大跃进。也
确实是嘴巴上的大跃进,从东吃到西,从南吃到北,从河鲜吃到海鲜,油乎乎的
嘴巴中一个一个世界空白被填补。
这种现状和柏林墙很像呀!曾看过一段关于柏林墙的评价,堪称经典:
世界上的围墙都是防止外面的人闯进来,只有一种围墙是防止里面的人出去
的,那是什么?那就是监狱的围墙!在这样的墙里面是什么地方?那不就是监狱
吗?
我无意去批评任何人,这种现状的产生并非一朝一夕,一人之力。在这个漩
涡中的每个人都身不由己,被动或主动的去忽略科学,正视利益。
科学工作者没有独立的人格和意愿,面对的只是官本位和市场经济的强烈压
力,在这种情况下,中国想要获得诺贝尔奖实在是天方夜谭!
请原谅我发这么多牢骚,不过此书正是在有点怨气的情况下写出的。我想让
更多的人了解计算机图形学,了解 GPU 编程,而不是认为那是很遥远很飘渺的事
情。当我查询 Cg 语言的文献时,NVIDIA 公司出的 CgUsersManual 一书已经有了
6
日文版的翻译,而中文版的却还未出现;当我研究体绘制算法时,到处寻找用于
实验的体数据,在中文网站上未曾发现。
虽然我一向要求自己做一块坚硬的石头,被水冲过不留痕,也不屑于留什么
尘,但是面对不确定的未来难免有惴惴不安之感。正所谓人生失意无南北,或许
有一天我的职业生涯走到了无路可回的境地,不得不放弃自己的专业,今天留下
点回忆也不错。
最后,愿中国的学术可以“天地开辟,日月重光”!
天地漫漫,浩瀚史诗
金黄,那神性灿烂的光芒
没有一种爱
没有一种情
可以在自由之上
星辰如海啊
请听我倾说
我的爱人很不一般
那是天地之外的逍遥自在
7
第 1 章 绪论............................................................................................................13
1.1 Programmable Graphics Processing Unit 发展历程..........................................13
1.2 GPU VS CPU................................................................................................................15
1.3 国内外研究现状........................................................................................................18
1.4 本书主要内容和结构 ..............................................................................................18
第 2 章 GPU 图形绘制管线.......................................................................................21
2.1 几何阶段 .....................................................................................................................22
2.1.1 从 object space 到 world space............................................................23
2.1.2 从 world space 到 eye space................................................................24
2.1.3 从 eye space 到 project and clip space ................................................25
2.2 Primitive Assembly && Triangle setup..................................................................26
2.3 光栅化阶段.................................................................................................................27
2.3.1 Rasterization .........................................................................................27
2.3.2 Pixel Operation .....................................................................................28
2.4 图形硬件 .....................................................................................................................30
2.4.1 GPU 内存架构.....................................................................................30
2.4.2 Z Buffer 与 Z 值 ...................................................................................31
2.4.3 Stencil Buffer ........................................................................................33
2.4.4 Frame Buffer.........................................................................................34
2.5 本章小节.......................................................................................................................35
第 3 章 Shader Language............................................................................................36
3.1 Shader Language 原理 .............................................................................................37
3.2 Vertex Shader Program ............................................................................................39
3.3 Fragment Shader Program .......................................................................................40
3.4 CG VS GLSL VS HLSL ............................................................................................41
3.5 本章小结 .....................................................................................................................43
第 4 章 Cg 语言概述..................................................................................................44
4.1 开始 Cg 之旅..............................................................................................................44
4.2 CG 特性.......................................................................................................................45
8