前言:你有多少次访问过你最喜欢的编程论坛或邮件列表,并对大量关于地形渲染算法的帖子感到惊讶,这些帖子似乎从各个角度向你袭来?地形渲染似乎是当今业余程序员最喜欢的主题;它是一个很好的入口,可以由此了解更高要求的问题及其解决方案。然而,地形渲染决不是一个简单的问题,特定的解决方案可能会变得相当复杂。来自“编程”生活各个阶层的人们都试图想出下一个最好的解决方案来表达他们对完美世界的想法。有些人甚至说,地形渲染算法的数量和编写地形引擎的人的数量一样多。这些解决方案大多是更广泛接受的解决方案的变体。这些解决方案通常被人们认为是具有良好性能的解决方案。其中一些已经存在了很长一段时间,多年来进行了修改,以适应不断变化的硬件。
本书采用了其中三种普遍接受的解决方案,并对其进行了测试。我很高兴地说,其中一个解决方案来自我自己的一堆编程想法中的一个,那是在我不时地在启蒙的闪光中出现出来的。本书在没有任何偏见或偏见的情况下比较了三种地形渲染解决方案,但我显然不想谈论它们,我将把这个留给作者。—Willem H. de Boer
目录:
系列编辑的来信。xii xiii
介绍。xiv
【第一部分】地形编程简介。1
第1章 大户外之旅。3
第2章 地形101。15
第3章 地形纹理。39
第4章 照明地形。57
【第二部分】高级地形编程。73
第5章 GeoMipmaping避免CLOD受损。75
第6章 攀登四叉树。105
第7章 无论你走到哪里。127
第8章 总结:特效和更多。165
附录光盘上的内容。205
索引。209
详细目录:
【Part One】 Introduction to Terrain Programming. . 1
CHAPTER 1 The Journey into the Great Outdoors . . . 3
“Terrain? No Thanks, I Already Ate.” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
General Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Terrain and Game Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Demo Building Made Easy!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
The Main Demos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
The Book at an Itty-Bitty Glance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Part One: Introduction to Terrain Programming . . . . . . . . . . . . . . . . . . . . . . 11
Part Two:Advanced Terrain Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
The Demos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
CHAPTER 2 Terrain 101 . . . . . . . . 15
Heightmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
The Creation of a Base Terrain Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Loading and Unloading a Heightmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
The Brute Force of the Matter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Fractal Terrain Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Fault Formation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Midpoint Displacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
CHAPTER 3 Texturing Terrain . . . . 39
Simple Texture Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Procedural Texture Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
The Region System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
The Tile System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Creating the Texture Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Improving the Texture Generator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Using Detail Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
CHAPTER 4 Lighting Terrain . . . . . 57
Height-Based Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Coloring the Light Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Hardware Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Lightmapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Slope Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Okay, Slope Lighting Is Cool, But How Is It Performed? . . . . . . . . . . . . . . . . 66
Creating a Slope-Lighting System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Dynamically Creating Lightmaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
【Part Two】 Advanced Terrain Programming . . . . 73
CHAPTER 5 Geomip-mapping for the CLOD Impaired . . . 75
CLOD Terrain 101. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Why Bother with CLOD Terrain? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Not Everything Is Happy in the Land of CLOD Terrain . . . . . . . . . . . . . . . . 78
Wrapping Up Your Introduction to CLOD Terrain . . . . . . . . . . . . . . . . . . . . 78
Geomipmapping Theory for the Semi-CLOD Impaired . . . . . . . . . . . . . . . . . . . . 79
Simply the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Triangle Arrangement Made Easy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Implementing Geomipmapping for the Very Slightly CLOD Impaired . . . . . . . . . . 87
Patch It Up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Creating the Basic Geomipmapping Implementation . . . . . . . . . . . . . . . . . . 87
Problems Exist to Be Fixed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
CHAPTER 6 Climbing the Quadtree. 105
Quads Do Grow on Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Think Outside of the Quad! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Simply the Basics… Again. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Propagation Propaganda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Cull Like You’ve Never Culled Before… Again . . . . . . . . . . . . . . . . . . . . . . 115
Hug the Quadtree, Love the Quadtree, Be the Quadtree . . . . . . . . . . . . . . . . . 116
Implementing the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Complicating Things a Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Speeding Things Up a Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
CHAPTER 7 Wherever You May ROAM . . . . . . . . 127
The ROAM Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Theory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Improvements to the ROAM Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Seamus’s Changes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
ROAM 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Step 1: Implementing the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Step 2:Adding Frustum Culling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Step 3:Adding the Backbone Data Structure . . . . . . . . . . . . . . . . . . . . . . . 149
Step 4:Adding a Split/Merge Priority Queue. . . . . . . . . . . . . . . . . . . . . . . . 156
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
CHAPTER 8 Wrapping It Up: Special Effects and More . . . 165
It’s All in the Water . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Letting the Water Flow, Part 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Letting the Water Flow, Part 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Primitive-Based Environments 101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Thinking Outside of the Sky-Box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Living Under the Sky-Dome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Camera-Terrain Collision Detection and Simple Response . . . . . . . . . . . . . . . . 187
Lost in the Fog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Distance-Based Fog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Vertex-Based Fog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Particle Engines and Their Outdoor Applications . . . . . . . . . . . . . . . . . . . . . . . . 192
Particle Engines:The Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Taking Particles to a New Dimension. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Adding Data Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Applying a Particle Engine to an Outdoor Scene . . . . . . . . . . . . . . . . . . . . 201
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Epilogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
References. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
APPENDIX What’s on the CD. . . . 205
The GUI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
System Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
The Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Index . . . . . . . . . . . . . . . . . . 209
0. Letter from the Series Editor
或迟或早这一天会来到。必须要有人制作一个游戏,让你真正走出去,做一些事情,而不是在室内乱跑。别误会我的意思;黑暗的时代,终极的邪恶,每个角落都有成群可怕的生物,这很有趣,但我们都需要一些光明!《专注于三维地形编程》就是关于这的。
每个人(即使你还没有创建自己的第一人称射击3D引擎)至少都知道二进制空间分区、八叉树、portals和其他类似技术通常用于这些类型的室内环境。然而,围绕地形编程和数千、数十万甚至数百万多边形的大规模户外渲染的神秘感仍然是一个保存完好的技巧。当然,如果你阅读德波尔(Boer)的地理混合映射算法(geomipmapping)、Rottger的四叉树算法或Duchaineau的ROAM算法,诀窍就在那里,但带有抽象一词的白皮书对我没有太大吸引力。我需要一些更实际的东西,在现实世界中真正有效,并且有我可以使用的代码。这就是这本书的动机。
《聚焦3D地形编程》是有史以来第一本100%专注于地形编程的书,也是第一本让它真实易懂的书。此外,这本书小巧可爱,如果你愿意,你可以购买数千份来创建真实的3D地形!但说真的,这本书太棒了。毫无疑问,作者特伦特·波拉克已经实现了无数的地形引擎,他的知识、失败和成功将为您节省大量时间。
这本书一开始就假设你对地形编程一无所知,除了计算机将参与其中,你可能需要向量<BG>。除此之外,特伦特从地形编程的一般概述开始,然后您开始使用OpenGL作为首选API编写您的第一个程序。如果你是一个Direct3D或软件3D的家伙,不要担心;OpenGL就像3D的C/C++。发生的事情是显而易见的,而且它让所有的Linux用户都很高兴,当然,这也让他们的脸保持了坚强。无论如何,在介绍完之后,本书立即进入了各种流行的地形算法,从蛮力网格到地理混合映射、四叉树和ROAM。我让你弄清楚首字母缩略词!
此外,纹理映射技术、照明和渲染地形的所有其他方面都通过工作演示进行了说明(有很多)。这本书以水、网格动画、粒子系统(如雨)、雾化和账单等特效结束。
我知道我经常这么说,但这是我最喜欢的书之一。它的酷之处在于,你基本上对地形编程一无所知,然后在周末就知道了一切!此外,特伦特的代码是我见过的最好的代码之一。当文本中的概念难以理解时,你可以很容易地遵循他的逻辑。这是编程书籍的关键,因为许多作者没有解释某些内容所需的页面,或者这只是一个很难讨论的主题。因此,剩下的代码可以弥补这一差距,但如果代码是“hackerek”,那么几乎不可能遵循。Trent已经尽力干净地编写代码,经常发表评论,并使用合理高效的编程结构,这些结构是最优的,但并非不可能理解。
最后,Premier游戏开发系列再次凭借《聚焦3D地形编程》首次亮相。我敢打赌,过一段时间,互联网上就会充斥着基于地形的3D游戏,而不是通常的在一个黑屋子里到处乱跑的游戏,这将是一个很好的变化。我强烈推荐这本书给那些对户外3D渲染感兴趣并想通过实验和学习压缩和过滤到这本书中的内容来节省大约3-6个月时间的人。
0.Introduction
欢迎《聚焦三维地形编程》!这本书将带你从一个完全没有地形编程知识的新手程序员变成一个完全知情的地形程序员,他可以实现一些最复杂的算法。这本书到底是关于什么的?好吧,我给你。
《聚焦三维地形编程》是您对三维地形编程的回答。它全面介绍了最流行的算法(甚至是一种全新的算法),并以轻松有趣的方式讨论了它们的所有概念。对于那些喜欢从视觉上看解释而不是试图从文本中理解解释的人来说,所以还附带了几个演示,所有这些都可以在书的配套CD上找到。
准备好进入地形编程的丛林;一旦你进入其中,即使是最大的一罐山露也无法将你吸引出来。这本书进展很快,但任何一个有C/C++经验的程序员,只要对基本的3D理论有一点了解,就不会有什么难以理解的地方。无论讨论有多复杂,总是有乐趣的,无论是实现一个很酷的新功能还是一个蹩脚的笑话。所以,事不宜迟,让我们开始旅程吧!
【PART ONE】 Introduction to Terrain Programming
CHAPTER 1 The Journey into the Great Outdoors
>>地形渲染系列(视频):https://www.bilibili.com/video/BV1cT411m7F8/(Etay Meiri)