Focus On
3D Terrain
Programming
Trent Polack
© 2003 by Premier Press, a division of Course Technology. All rights reserved. No
part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information
storage or retrieval system without written permission from Premier Press, except for
the inclusion of brief quotations in a review.
The Premier Press logo and related trade dress are trademarks of Premier
Press and may not be used without written permission. All other trademarks
are the property of their respective owners.
Publisher: Stacy L. Hiquet
Marketing Manager: Heather Hurley
Acquisitions Editor: Emi Smith
Project Editor/Copy Editor: Karen A. Gill
Technical Reviewer: André LaMothe
Interior Layout: Shawn Morningstar
Cover Design: Mike Tanamachi
Indexer: Sherry Massey
Proofreader: Jenny Davidson
The Premier Press logo and related trade dress are trademarks of Premier Press and
may not be used without written permission. All other trademarks are the property of
their respective owners.
Black and White is a trademark of Black and White Studios. Direct3D and Microsoft
Visual C++ are trademarks of Microsoft Corporation. Starsiege: Tribes is a trademark
of Sierra Entertainment, Inc. TreadMarks is a trademark of Longbow Digital Arts.
All other trademarks are the property of their respective owners.
Important: Premier Press cannot provide software support. Please contact the appropri-
ate software manufacturer’s technical support line or Web site for assistance.
Premier Press and the author have attempted throughout this book to distinguish
proprietary trademarks from descriptive terms by following the capitalization style
used by the manufacturer.
Information contained in this book has been obtained by Premier Press from sources
believed to be reliable. However, because of the possibility of human or mechanical
error by our sources, Premier Press, or others, the Publisher does not guarantee the
accuracy, adequacy, or completeness of any information and is not responsible for any
errors or omissions or the results obtained from use of such information. Readers
should be particularly aware of the fact that the Internet is an ever-changing entity.
Some facts may have changed since this book went to press.
ISBN: 1-59200-028-2
Library of Congress Catalog Card Number: 2002111228
Printed in the United States of America
03 04 05 06 BH 10 9 8 7 6 5 4 3 2 1
Premier Press, a division of Course Technology
2645 Erie Avenue, Suite 41
Cincinnati, Ohio 45208
Foreword
How many times have you visited your favorite programming
forum or mailing list and been amazed at the sheer number
of posts on terrain rendering algorithms that seem to fly at you from
every angle? Terrain rendering seems to be a favorite subject among
today’s hobbyist programmers; it serves as an excellent portal to more
demanding problems and their solutions. However, terrain rendering
is by no means a simple problem, and a particular solution can get
rather complex. People from all walks of “programming” life have
tried their hand at coming up with the next best solution for rendering
their idea of a perfect world. Some even dare say that there are as
many terrain rendering algorithms as there are people who write
terrain engines. Most of these solutions are variations of more widely
accepted solutions. These solutions are generally accepted by people
as solutions that give good performance. Some of them have been
around for quite a while and have been modified over the years to
adapt to the ever-changing hardware they are meant to run on.
This book takes three of these generally accepted solutions and puts
them through their paces. I am very pleased to say that one of these
solutions came from my very own puddle of programming ideas
I have popping up every now and again in a flash of enlightenment.
As this book compares three terrain rendering solutions without any
prejudice or bias, I am not one to talk about them, obviously. I will
leave that to the author.
—Willem H. de Boer
Acknowledgements
Wow, so many people need to be thanked. Let’s start with the trademark peo-
ple: my family and friends. First of all, I want to thank my mom, my step-dad,
my sister, and my dog. They rock, and without them, I wouldn’t be writing
this right now. I’d also like to thank my friends. Thanks to Kyle Way (you
owe me) for dealing with me at late times in the night and always distracting
me with things. Thanks to Nate, Renae, and Randy for always being there.
Also thanks to Luke, Claudia, Amanda, Laurelin, Marissa, Ella, Rebecca,
Lacee, Laura, and everyone else. You know who you are!
Next it’s time to thank the people I’m not so close to. (In fact, these are the
people who are as good of friends as any, but I’ve never actually seen them
before.) First of all, thanks to Evan for being a good programming partner
and a good friend. Also thanks to Ron for helping me out a ton and for just
being a good guy. Also, a huge thanks to Dave Astle, Kevin Hawkins, and
Jeff Molofee for getting me where I am today and being great mentors. Also
thanks to Mike, Sean, and Warren for being three really cool guys. I’d also
like to give a huge thanks to all the guys in #gamedev who put up with my
late-night rants about green bunnies and cats running around my monitor
waging war over Christmas lights.
Now, I’d like to thank all the people who made this book possible. A huge
thanks goes to Emi Smith, André LaMothe, and Karen Gill for helping to
make this book the best it could be, for actually giving me the opportunity
to write it, and just generally being a great bunch of people. I’d also like to
give another huge thanks to Willem de Boer, Stefan Rottger, and Mark
Duchaineau for giving me ideas and reviewing respective chapters to make
them the best they could be. In addition, thanks to the people at Longbow
Digital Arts for letting me use a demo of TreadMarks for this book’s CD, the
guys at Digital Awe for letting me put Tropical Storm on the CD, and the rest
of the guys who let me use their demos on the book’s CD: Thatcher Ulrich,
Leonardo Boselli, and Serba Andrey.
Finally, I’d like to thank the people and things that had no idea they were
even involved with this book at all. A huge thanks goes to Fender for making
my incredible guitar. Also, Pepsi Corporation deserves a thanks or two for
making the legendary Mountain Dew. Another really big thank you goes to
the guys at New Found Glory for being a great band and also to Tool, the
Offspring, Blink 182, and Nirvana. And finally, thanks to the people at Pacific
Sun for providing my “coding clothing.”
About the Author
Trent Polack is a high school student currently attending Kalkaska
High School. He has been programming in various languages since he
was nine years old, when his cousin showed him the joys of QBASIC.
Trent is an active contributor to the programming community, con-
tributing several tutorials to GameDev.net and its affiliates. He has a
passion for game programming, namely graphics, databases, and,
most of all, engine coding. When Trent is not programming, he takes
a large interest in reading (especially books by the late Douglas
Adams), basketball, playing guitar, and listening to music.
Contents at a Glance
Letter from the Series Editor . . . . . xii-xiii
Introduction . . . . . . . . . . . . . . . . . . . xiv
Part One
Introduction to Terrain Programming. . 1
CHAPTER 1 The Journey into the Great Outdoors . . 3
CHAPTER 2 Terrain 101 . . . . . . . . . . . . . . . . . . 15
CHAPTER 3 Texturing Terrain. . . . . . . . . . . . . . 39
CHAPTER 4 Lighting Terrain . . . . . . . . . . . . . . . 57
Part Two
Advanced Terrain Programming . . . . 73
CHAPTER 5 Geomipmapping for
the CLOD Impaired . . . . . . . . . . . . . 75
CHAPTER 6 Climbing the Quadtree . . . . . . . . . . 105
CHAPTER 7 Wherever You May ROAM . . . . . . . . 127
CHAPTER 8 Wrapping It Up:
Special Effects and More . . . . . . . 165
APPENDIX What’s on the CD. . . . . . . . . . . . . . 205
Index . . . . . . . . . . . . . . . . . . . . . 209
Contents
Introduction . . . . . . . . . . . . . . . . . . . xiv
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
Contents
ix
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