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 [...]... 15 0 15 1 15 2 15 2 15 5 16 1 16 3 16 6 16 7 16 8 16 9 17 0 17 3 17 4 17 5 17 8 17 8 18 1 Beyond the Basics 18 3 OpenGL Extensions 18 5 Anatomy of an Extension Extension Names Name Strings Functions Tokens ... 18 8 18 9 19 0 19 1 19 1 19 2 19 3 19 3 19 4 19 5 19 5 More on Texture Mapping 19 7 More on Texture Specification Sub-Images Copying from the Color Buffer The Texture Matrix Stack Texture Coordinate... 10 4 OpenGL Lighting and the Real World 10 4 Light Sources 10 6 Spotlights 10 9 Materials 11 1 Normals 11 5 The Lighting Model 11 8 Lighting in Action 12 0... 13 8 13 9 14 1 14 1 14 2 14 2 14 3 14 3 14 5 14 7 Texture Mapping 14 9 An Overview of Texture Mapping Texture Coordinates Using the Texture Map Texture Objects ... gluLookAt(0.0, 1. 0, 6.0, 0.0, 0.0, 0.0, 0.0, 1. 0, 0.0); // clear the screen glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f (1. 0, 0.0, 0.0); glVertex3f(2.0, 2.5, -1. 0); glColor3f(0.0, 1. 0, 0.0); glVertex3f(-3.5, -2.5, -1. 0); glColor3f(0.0, 0.0, 1. 0); glVertex3f(2.0, -4.0, 0.0); glEnd(); glBegin(GL_POLYGON); glColor3f (1. 0, 1. 0, 1. 0); glVertex3f( -1. 0, 2.0, 0.0); glColor3f (1. 0, 1. 0,... 13 1 Summary 13 1 Chapter 6 Bitmaps and Images with OpenGL 13 3 The OpenGL Bitmap Positioning the Bitmap Drawing the Bitmap An OpenGL Bitmap Example 13 3 13 4 13 5 13 6 TLFeBOOK Contents Using... 13 14 16 18 18 19 19 x TLFeBOOK Contents xi An OpenGL Application 20 Full-Screen OpenGL 31 Summary 33 Chapter 3 OpenGL States and Primitives 35 State Functions ... glVertex3f(-3.0, -0.5, 0.0); glColor3f(0.0, 1. 0, 1. 0); glVertex3f( -1. 5, -3.0, 0.0); TLFeBOOK 12 Chapter 1 ■ The Exploration Begins Again glColor3f(0.0, 0.0, 0.0); glVertex3f (1. 0, -2.0, 0.0); glColor3f (1. 0, 0.0, 1. 0); glVertex3f (1. 0, 1. 0, 0.0); glEnd(); The first two lines set up the camera, as explained in Chapter 4 glClear() —which you’ll learn about in Chapter 12 —is then used to clear the screen The... 12 1 Separate Blend Functions 12 5 The Blend Equation 12 5 Constant Blend Color 12 7 Disk Blender 12 7 Fog 12 8 OpenGL Fog 12 8 Fog Coordinates 13 0 Fog in Action ... Chapter 10 19 7 19 7 19 8 2 01 202 205 206 208 208 210 210 213 216 219 Up Your Performance . .11 1 Normals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 5 The Lighting Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 8 Lighting. . . . . .13 1 Chapter 6 Bitmaps and Images with OpenGL . . . . . . . . . . . . . . . . . .13 3 The OpenGL Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 3 Positioning. . . . . . . . . . . .3 01 Contentsxvi 00 BOGL_GP FM 3 /1/ 04 2 :14 PM Page xvi TLFeBOOK I n the spring of 20 01, we finished writing OpenGL Game Programming. Although the book didn’t cover everything