TLFeBOOK 00 BOGL_GP FM 3/1/04 2:14 PM Page i TLFeBOOK This page intentionally left blank TLFeBOOK 00 BOGL_GP FM 3/1/04 2:14 PM Page iii TLFeBOOK © 2004 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 Course PTR, 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. OpenGL is a registered trademark of SGI. glFont © 2004 Brad Fish, bhf5@email.byu.edu. GLee © 2004 Ben Woodhouse, ben@elf-stone.com, with parts copyright by SGI. All rights reserved. All other trademarks are the property of their respective owners. Important: Course PTR cannot provide software support. Please contact the appropriate software manufacturer’s technical support line or Web site for assistance. Course PTR and the authors have attempted throughout this book to distin- guish proprietary trademarks from descriptive terms by following the capital- ization style used by the manufacturer. Information contained in this book has been obtained by Course PTR from sources believed to be reliable. However, because of the possibility of human or mechanical error by our sources, Course PTR, 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. Educational facilities, companies, and organizations interested in multiple copies or licensing of this book should contact the publisher for quantity dis- count information. Training manuals, CD-ROMs, and portions of this book are also available individually or can be tailored for specific needs. ISBN: 1-59200-369-9 Library of Congress Catalog Card Number: 2004090734 Printed in the United States of America 04 05 06 07 08 BH 10 9 8 7 6 5 4 3 2 1 Course PTR, a division of Course Technology 25 Thomson Place Boston, MA 02210 http://www.courseptr.com Senior Vice President, Course PTR Group: Andy Shafran Publisher: Stacy L. Hiquet Senior Marketing Manager: Sarah O’Donnell Marketing Manager: Heather Hurley Manager of Editorial Services: Heather Talbot Senior Acquisitions Editor: Emi Smith Associate Marketing Manager: Kristin Eisenzopf Project Editor: Sandy Doell Technical Reviewer: Ben Woodhouse Retail Market Coordinator: Sarah Dubois Interior Layout Tech: Marian Hartsough Cover Designer: Steve Deschene CD-ROM Producer: Brandon Penticuff Indexer: Katherine Stimson Proofreader: Gene Redding 00 BOGL_GP FM 3/1/04 2:14 PM Page iv TLFeBOOK For my family and friends —Kevin For my crash of rhinos —Dave 00 BOGL_GP FM 3/1/04 2:14 PM Page v TLFeBOOK F irst and foremost, I want to thank my wife Melissa and my kids, Rebi, Evan, Ellie, Tyler, and Nate, for all of your support throughout this project, and for dragging me away from the computer just often enough for me to retain most of my sanity. I love you all. I’d also like to thank Kevin, my partner and collaborator, without whom I never would have done this. I can’t imagine finding a better teammate. Big thanks to everyone at Premier Press/Course Technology. You’re a great group of peo- ple to work with, and I genuinely appreciate the confidence you place in me. Ben Woodhouse deserves special mention for his efforts as technical editor. He provided valuable feedback that helped make this book much better than it would have been oth- erwise. Thanks also to The Mighty Pete for allowing us to use his skybox images in many of the example programs, and to Jeff Royle from ATI Technologies for providing us with graphics hardware for testing purposes. Finally, I want to thank everyone who has taught me in some way, including Chuck Hansen, Robert Kessler and my other professors at the University of Utah, my coworkers at Avalanche Software and Qualcomm, the denizens of the GameDev.net forums, and everyone else who has taken the time to share their knowledge and experience via a Web site or book. —Dave Astle vi Acknowledgments 00 BOGL_GP FM 3/1/04 2:14 PM Page vi TLFeBOOK I’d like to thank Dave, for his work as a good teammate, motivator, and friend. Chances are you would not be holding this book in your hands if he had not used a little friendly coercion on me. I’m amazed at what we were able to accomplish with this project, and a good deal of its success is due to our ability to work together as a team. I also want to thank my family for their constant support for me in everything I do. Oftentimes they don’t get as much credit as they should be getting. My friends and coworkers also deserve a share of the thanks. Whether they know it or not, I’ve learned from all of them in some form or another and value their friendships: Tucker, Tom, Christie, Mike, Rael, Kristin, Vivian, JP, Andy, Greg R., Greg S., Bill, Kyle, Randall, Jordan, Hack, Justin, Nate, Luke M., Mike M., Johnny Y., Nick M., and so many others that we don’t have the space for here. Also, thank you to the Premier Press group for the oppor- tunity to do this project and for maintaining a high degree of support and confidence in both Dave and me, and in GameDev.net. And finally, I want to thank everyone who has provided me with the ability and talent, directly or indirectly, that has allowed me to create this book, including the professors at Embry-Riddle, my baseball coaches and teammates, Chris Hargrove, Seth Robinson, Jeff Molofee, Rich Benson, and a host of software engineering colleagues. —Kevin Hawkins Acknowledgments vii 00 BOGL_GP FM 3/1/04 2:14 PM Page vii TLFeBOOK DAV E ASTLE has been programming games professionally for several years, working on titles for the Xbox, PlayStation 2, GameCube, PC, and various wireless devices. Currently, he is a lead engineer in the Gaming and Graphics group at Qualcomm, Inc. He is the cofounder and executive producer of GameDev.net, the leading online community for game developers. He has authored or contributed to several game development books and has spoken at industry conferences, including the Game Developers’ Conference. He received his bachelor’s degree in Computer Science from the University of Utah, where he specialized in graphics, artificial intelligence, networking, software engineering, and com- piler theory and design. K EVIN HAWKINS is a lead software engineer at Raydon Corporation where he designs and develops training simulations for a variety of customers, including the U.S. military. In addition, Kevin is the cofounder and CEO of GameDev.net, the leading online commu- nity for game developers. He holds a master’s degree in Software Engineering and a bach- elor’s degree in Computer Science from Embry-Riddle University, where he also played intercollegiate baseball and was drafted by the Cleveland Indians in the 2002 amateur baseball draft. viii About the Authors 00 BOGL_GP FM 3/1/04 2:14 PM Page viii TLFeBOOK Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii Part I OpenGL Basics . . . . . . . . . . . . . . . . . . . . . . . .1 Chapter 1 The Exploration Begins . . . Again . . . . . . . . . . . . . . . . . . . . . . . . . .3 Chapter 2 Creating a Simple OpenGL Application . . . . . . . . . . . . . . . . . . . . .13 Chapter 3 OpenGL States and Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 Chapter 4 Transformations and Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 Chapter 5 Colors, Lighting, Blending, and Fog . . . . . . . . . . . . . . . . . . . . . . .99 Chapter 6 Bitmaps and Images with OpenGL . . . . . . . . . . . . . . . . . . . . . . .133 Chapter 7 Texture Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149 Part II Beyond the Basics . . . . . . . . . . . . . . . . . . .183 Chapter 8 OpenGL Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185 Chapter 9 More on Texture Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197 Chapter 10 Up Your Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221 Chapter 11 Displaying Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 Chapter 12 OpenGL Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261 Chapter 13 The Endgame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277 Part III Appendices . . . . . . . . . . . . . . . . . . . . . . . . .283 Appendix A Answers to Review Questions and Exercises . . . . . . . . . . . . . . . .285 Appendix B Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295 Appendix C What’s on the CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301 ix Contents at a Glance 00 BOGL_GP FM 3/1/04 2:14 PM Page ix TLFeBOOK [...]... OpenGL s origins, design, and evolution We’ll also provide an overview of the game industry, as well as a look at the core elements involved in a game In this chapter, you will learn: ■ ■ ■ What a game is About OpenGL and its history About libraries that can be used to expand OpenGL s functionality Why Make Games? Interactive entertainment has grown by leaps and bounds in the last decade Computer games,... 285 Appendix B Further Reading 295 Online Resources Game Development Game Tutorials Flipcode OpenGL Books C++ Windows Programming 3D Math OpenGL Graphics Programming Game Development Appendix C ... incomplete, and every page we spent on it would be one page less on OpenGL and game programming So, if you don’t already know how to at least get a basic application up and running on your platform of choice, spend some time hitting the books or reading tutorials That said, in OpenGL Game Programming, we included a chapter covering the basics of Win32 programming Because we believe that the majority of our readers... non-trivial games Our philosophy is to focus on one thing and do it well, rather than trying to cover many things and do them poorly What’s New If you’ve read, or at least looked at, OpenGL Game Programming, you may be wondering what’s different about this book The most obvious change is that this book is much smaller This book covers most of the material covered through Chapter 13 in OpenGL Game Programming. .. xvii Part I OpenGL Basics 1 Chapter 1 The Exploration Begins Again 3 Why Make Games? 3 The World of 3D Games 4 The Elements of a Game 4 What Is OpenGL? 6 OpenGL History 7 OpenGL Architecture... CD, for your convenience Even though we won’t be covering platform-specific programming in general, we will cover Windows-specific issues related to OpenGL because the way you set up and initialize OpenGL varies from system to system The third assumption we make is that you have some understanding of 3D math Many beginning game programming books (including our original one) provide 3D math primers, but... a game is divided into its own separate piece and communicates with other elements of the game The game logic element tends to be the hub of the game, where decisions are made for processing input and sending output The architecture shown in Figure 1.1 is very simplistic, however; Figure 1.2 shows what a more advanced game s architecture might look like As you can see in Figure 1.2, a more complex game. .. and excited field OpenGL is a graphics library that is used in many games OpenGL has been around for over 10 years Its development is overseen by the Architectural Review Board Libraries such as GLUT and SDL can be used in conjunction with OpenGL for faster development and added functionality Review Questions 1 When was OpenGL first introduced? 2 What is the current version number of OpenGL? 3 Who decides... for programmers who are just getting started in 3D game development We assume that you’re comfortable programming in C++ and hope that you have at least a basic understanding of 3D mathematics and graphics By the end of the book, you should understand all of the basics of OpenGL and be able to apply them to games If you’re already experienced with OpenGL, you may still find some useful tidbits here,... many people to this industry, but why do people really make games? From working in the game industry ourselves and talking to many others who do as well, one thing seems to drive people to learn and succeed at the art of game development: fun Games have come to be known as one of the more creative forms of software development, and the amazing games that have been released in recent years are a testament . finished writing OpenGL Game Programming. Although the book didn’t cover everything we had initially planned, we hoped that it would bene- fit people learning to program games with OpenGL. The ensuing. producer of GameDev.net, the leading online community for game developers. He has authored or contributed to several game development books and has spoken at industry conferences, including the Game. topics in game development not directly related to graphics or OpenGL. Subjects such as game design, artificial intel- ligence, networking, audio, and physics are all very important to games, but