817-2FM.qxd 3/27/07 3:40 PM Page i Pro Java 6 3D Game ™ Development Java 3D™, JOGL, JInput, and JOAL APIs Andrew Davison 817-2FM.qxd 3/27/07 3:40 PM Page ii Pro Java™6 3D Game Development: Java 3D™,JOGL,JInput,and JOAL APIs Copyright © 2007 by Andrew Davison All rights reserved. No part of this work 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 the prior written permission of the copyright owner and the publisher. ISBN-13: 978-1-59059-817-7 ISBN-10: 1-59059-817-2 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries. Apress Inc. is not affiliated with Sun Microsystems, Inc. and this book was written without endorsement from Sun Microsystems, Inc. Lead Editor: Steve Anglin Technical Reviewers: Chien Yang and Shawn Kendall Editorial Board: Steve Anglin, Ewan Buckingham, Gary Cornell, Jason Gilmore, Jonathan Gennick, Jonathan Hassell, Chris Mills, Matthew Moodie, Jeffrey Pepper, Paul Sarknas, Dominic Shakeshaft, JimSumser, Matt Wade Project Manager: Denise Santoro Lincoln Copy Edit Manager: Nicole Flores Copy Editor: Jennifer Whipple Assistant Production Director: Kari Brooks-Copony Senior Production Editor: Laura Cheu Compositor: Gina Rexrode Proofreader: Elizabeth Berry Indexer: Becky Hornyak Artist: Andrew Davison, April Milne Cover Designer: Kurt Krames Manufacturing Director: Tom Debolski Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit http://www.springeronline.com. For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com. The information in this book is distributed on an “as is” basis, without warranty. Although every precau- tion has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at http://www.apress.comin the Source Code/ Download section. It is also available at the author’s web site at http://fivedots.coe.psu.ac.th/~ad/jg2/. 817-2FM.qxd 3/27/07 3:40 PM Page v Contents at a Glance About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv PART 1 n n nJava 3D nCHAPTER 1 Introducing Java 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 nCHAPTER 2 Get a Life (in 3D). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 nCHAPTER 3 Get a Life (the Java 6 Way) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 nCHAPTER 4 The Colliding Grabbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 nCHAPTER 5 When Worlds Collide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 nCHAPTER 6 A Multitextured Landscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 nCHAPTER 7 Walking Around the Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 nCHAPTER 8 More Backgrounds and Overlays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 PART 2 n n nNonstandard Input Devices nCHAPTER 9 Webcam Snaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 nCHAPTER 10 Navigating a 3D Scene by Waving Your Arm . . . . . . . . . . . . . . . . . . . . . . . . 251 nCHAPTER 11 Building a Gamepad Controller with JInput . . . . . . . . . . . . . . . . . . . . . . . . . 273 nCHAPTER 12 Gamepad Grabbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 nCHAPTER 13 3D Sound with JOAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 nCHAPTER 14 The P5 Glove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 PART 3 n n nJOGL nCHAPTER 15 Two JOGL Programming Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 nCHAPTER 16 Touring the World. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 nCHAPTER 17 Loading Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 nINDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 v 817-2FM.qxd 3/27/07 3:40 PM Page vii Contents About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv PART 1 n n nJava 3D nCHAPTER 1 Introducing Java 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Overview of Java 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Overview of the Scene Graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Some Java 3D Scene Graph Nodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 The HelloUniverse Scene Graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Java 3D Strengths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 The Scene Graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Performance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Unique Features. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Java Integration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Documentation and Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Criticisms of Java 3D for Games Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Java 3D’s Level of Abstraction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Java 3D Games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Java 3D Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Alternatives to Java 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 nCHAPTER 2 Get a Life (in 3D). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 The Game of Life. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Running Life3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Configuring Life3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 A Life3D Screensaver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 An Overview of the Life3D Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Deciding How to Start. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 vii 817-2FM.qxd 3/27/07 3:40 PM Page viii viii nCONTENTS Displaying the 3D Game. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Integrating Java 3D and Swing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Window Sizing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Processing Key Presses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Scene Graph Creation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Lighting the Scene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 The Scene’s Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Building the Cells Grid and Making It Behave. . . . . . . . . . . . . . . . . . . . . . . . 25 Viewer Positioning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Viewer Movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Behaviors in Java 3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 A Time-Based Behavior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Managing the Grid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Accessing Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Creating the Grid Scene Graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Updating the Cells States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Will the Cell Live or Die?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Rotating the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 The Cell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Building the Cell’s Scene Graph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Coloring the Cells. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Setting the Cell’s Visibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Changing a Cell’s Life State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Visual Changes to a Cell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Time for Screensavers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Changing Life3D into a Screensaver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Problems with Screensavers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 The SaverBeans SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 More Life Required? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 nCHAPTER 3 Get a Life (the Java 6 Way). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Life3D Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 An Overview of the Life3D Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Making a Splash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Animating a Clock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Drawing onto a Splash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Drawing the Clocks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 JAR Packaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Adding ClockAnimation to Life3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 817-2FM.qxd 3/27/07 3:40 PM Page ix nCONTENTS ix The Desktop API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Using the Desktop Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 What Other Browser Capabilities Are There?. . . . . . . . . . . . . . . . . . . . . . . . 57 The System Tray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Creating Life3D’s Popup Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 The Menu Contents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Creating the TrayIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Building the Popup Menu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Listening for Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Using a Text Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Launching an E-mail Client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Listening for the Check Boxes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Scripting in Java SE 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Executing a Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Communicating with a Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Speeding Things Up. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Calling Script Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Letting a Script Use Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 More Scripting Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Scripting in Life3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Initializing the Grid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Changing the Grid’s State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Executing the Script Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 The Rules Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 nCHAPTER 4 The Colliding Grabbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Building Articulated Arms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Class Diagrams for Arms3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Creating the Application Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Drawing the 3D Scene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Processing the Keys. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Monitoring Grabber Joints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Managing the Grabbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Adding the Grabbers to the Scene Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Processing Keyboard Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Translating the Grabbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Rotating a Grabber Joint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Collecting the Collision Joints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Collision Detection and Recovery. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Why Bother with JointsBehavior? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Touching the Floor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 817-2FM.qxd 3/27/07 3:40 PM Page x x nCONTENTS The Grabber. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Making the Grabber’s Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 The Grabber Shape. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Local and Global Coordinate Systems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Making the Fingers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Handling Rotation Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Collision Detection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Implementing Collision Detection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Initializing the Bounding Spheres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Positioning the Bounding Spheres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Touching the Ground. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 The Floor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 The Colored Tiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 The Floor’s Axes Labels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 nCHAPTER 5 When Worlds Collide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Odejava and ODE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Installing Odejava. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Documentation,Examples,and Online Help. . . . . . . . . . . . . . . . . . . . . . . . 123 Bouncing a Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Three-Stage Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Initializing the Engines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Initializing Static Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Initializing Dynamic Objects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Executing the Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Performing a Simulation Step. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Examining the Contact Points. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Cleaning Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Visualizing Balls in a Box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Creating the Scene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 The Box. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Managing the Spheres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 A Sphere. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 I’m Steppin’ Out…. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 A Note of Application Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 817-2FM.qxd 3/27/07 3:40 PM Page xi nCONTENTS xi nCHAPTER 6 A Multitextured Landscape. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Surveying the Landscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Building the Scene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Creating the Floor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Start the Balls Moving. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Moving Around the Scene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 The Multitextured Floor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Heights Map Generation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 The Floor’s Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 The Floor’s Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 The Splash Shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 The Splash Shape’s Geometry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 The Splash Shape’s Appearance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Moving Balls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Positioning the Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Moving About. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Driving the Balls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 More Multitexturing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Bump Mapping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Shaders. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 nCHAPTER 7 Walking Around the Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Populating a Scene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Class Diagrams for ObjView3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 A Spherical Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 A Skybox Background. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 A Skybox Built with Quads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Terragen and NConvert. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 From Images to Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Making the Skybox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Texturing a Plane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 The Size of the Skybox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Loading Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Loading OBJ Models. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 The OBJ Model Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Positioning a Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 817-2FM.qxd 3/27/07 3:40 PM Page xii xii nCONTENTS Ground Cover. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Manipulating the User’s Viewpoint. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Positioning the User’s Viewpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Moving the Viewpoint at Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Setting Up the Key Behavior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Processing a Key. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 nCHAPTER 8 More Backgrounds and Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Retained,Immediate,and Mixed Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 The Earth,Moon,and Mars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Building the Scene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 The Background. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Some Variations on a Theme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Spinning the Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Building the Scene and Terminating. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Rotating the Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Manipulating the Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Rotation and Clipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Avoiding Gaps in the Rotated Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Terminating the Thread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Drawing the Background Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 The Model Viewer with a Shifting Background and Overlays. . . . . . . . . . . . . . . 219 Setting Up the Canvas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Modifying the Key Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 A Canvas with a Background and Overlays. . . . . . . . . . . . . . . . . . . . . . . . . 223 Drawing the Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 The Deep Blue Sea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Adding Overlays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 PART 2 n n nNonstandard Input Devices nCHAPTER 9 Webcam Snaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Webcam Snaps with TWAIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Displaying Pictures Using TWAIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Snapping a Picture Again and Again and .... . . . . . . . . . . . . . . . . . . . . . . . 235 The TWAIN Capture Device. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 TWAIN Timing Tests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 817-2FM.qxd 3/27/07 3:40 PM Page xiii nCONTENTS xiii Webcam Snaps with JMF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Again Taking Pictures Again and Again. . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 The Capture Device with JMF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Comparing TWAIN and JMF Capture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 QTJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Other Uses for Webcam Snaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 nCHAPTER 10 Navigating a 3D Scene by Waving Your Arm. . . . . . . . . . . . . . . . 251 Using the Wrist Strap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Image Processing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Image Processing Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Dealing with the Issues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Finding the Bands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 FindBands Class Diagrams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Image Processing Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 The Bands Analyzer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 The Band Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Representing a Blob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Arm Navigation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Creating the 3D Scene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Moving the User’s Viewpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 From Analysis to Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Other Approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 JAI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 ImageJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Image Processing Books. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 nCHAPTER 11 Building a Gamepad Controller with JInput. . . . . . . . . . . . . . . . . 273 JInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 The Gamepad and Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Installing and Testing JInput. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 Examining the Input Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 The Other JInput Test Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Three JInput Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Listing the Controllers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Viewing Controller Details. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Testing a Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Description: