|
Java 3D Programming Daniel Selman 2002 | 400 pages ISBN: 1930110359 |
|||
![]() |
$49.95 | Softbound print book | |
![]() |
$25.00 | PDF ebook | |
Table of Contents
preface xviiacknowledgments xix
about this book xx
about the cover illustration xxiii
- 1 What is Java 3D and is it for me? 1
- 1.1 Strengths 2
- 1.2 Weaknesses 3
- 1.3 System requirements (developer and end user) 5
- 1.4 Expected performance 6
- Memory footprint 7
- 1.5 Running the examples 8
- 1.6 Summary 8
- 2 3D graphics programming 10
- 2.1 Learning 3D graphics programming 10
- 2.2 Projecting from 3D world coordinates to 2D screen coordinates 13
- A simple 3D projection routine 13 ♦ Comparing output 15 ♦ Drawing filled triangles 16
- 2.3 Lighting effects 19
- 2.4 Putting it together—MyJava3D 21
- 2.5 Summary 26
- 3 Getting started, Hello Java 3D! 27
- 3.1 Installation 27
- Java 2 SDK 27 ♦ Java 3D 1.2 JDK 28 ♦ Documentation 28 ♦ Java 2 development environment (optional) 30 ♦ Performance analysis tools (optional) 30 ♦ Java class decompiler (optional) 30
- 3.2 Your first Java 3D application 30
- 3.3 Exercises for the reader 37
- Colors and lighting 37 ♦ Animation parameters 37 ♦ Background geometry 38 ♦ Scheduling bounds 38 ♦ Capability bits 38 ♦ The position of the viewer of the scene 38 ♦ Size of sphere primitives 38
- 3.4 Summary 38
- 4 The scenegraph 39
- 4.1 Overview 39
- 4.2 What is a scenegraph? 42
- 4.3 Java 3D and the scenegraph 46
- 4.4 Elements of scenegraph design 51
- Object-oriented 51 ♦ Compilable 51 ♦ Level of detail independent 51 ♦ Polymorphic (customizable) 51 ♦ Bounds and level of detail aware 51
- 4.5 Scenegraph advantages 52
- Object management 52 ♦ Rendering optimization 52 ♦ Picking support 52 ♦ Behavior model 52 Collision detection 52 ♦ Multiple thread aware 52 ♦ Hierarchical control 52
- 4.6 Hierarchical control 53
- 4.7 Immediate mode vs. retained mode vs. mixed mode 56
- Immediate mode 57 ♦ Mixed mode 61 ♦ Summary of modes 62
- 4.8 Summary 64
- 5 Scenegraph node reference 65
- 5.1 Scenegraph compilation 65
- Appearance merging and sorting 66 ♦ Geometry merging 66
- 5.2 Node 66
- 5.3 Bounds and CollisionBounds 67
- Bounds and CollisionBounds propagation 69
- 5.4 Group 71
- Remove a child Node by reference 72
- 5.5 Switch 73
- 5.6 BranchGroup 75
- 5.7 OrderedGroup 77
- 5.8 SharedGroup and link 78
- 5.9 Primitive 80
- 5.10 TransformGroup 80
- 5.11 Summary 81
- 6 Defining the universe 82
- 6.1 Locales and HiResCoord 82
- 6.2 View, ViewPlatform, and Locale 85
- 6.3 SimpleUniverse 87
- Avatars and platform geometry 92
- 6.4 Background geometry 94
- 6.5 Using multiple views 95
- Billboards and LOD behaviors 95
- 6.6 Summary 96
- 7 Data model design 97
- 7.1 Choosing a data model 97
- Surface models 98 ♦ Volumetric and mathematical models 100 ♦ Implementing in Java 3D 103
- 7.2 Performance objectives 104
- Rendering quality 105 ♦ Load time 106 ♦ Memory footprint 106 ♦ Development time and asset management 106
- 7.3 Summary 107
- 8 Geometry reference 108
- 8.1 Shape3D 108
- The user data field 109
- 8.2 Primitive 109
- Box 111 ♦ Cone 113 ♦ Cylinder 114 ♦ Sphere 115 ♦ Primitive flags 115 ♦ Primitives and the geometry cache 116
- 8.3 GeomBuffer 116
- 8.4 Rasters 116
- Rendering an image using a Raster 117 ♦ Retrieving scene depth components using a Raster 117
- 8.5 Text2D 121
- 8.6 Text3D 122
- Complex geometry 123 ♦ SetString problems 124
- 8.7 Morph 124
- 8.8 Summary 125
- 9 Setting geometry appearances 126
- 9.1 Introduction 126
- 9.2 Appearance 128
- 9.3 ColoringAttributes 129
- 9.4 LineAttributes 131
- 9.5 Material 132
- 9.6 PointAttributes 133
- 9.7 PolygonAttributes 136
- 9.8 RenderingAttributes 138
- 9.9 TexCoordGeneration 140
- 9.10 TextureAttributes 140
- 9.11 Texture 140
- 9.12 TransparencyAttributes 141
- A warning about transparency 144
- 9.13 Summary 148
- 10 Lights 149
- 10.1 Lights 150
- Lighting equations 151 ♦ Normal vectors and lighting 152 ♦ Lighting and material properties 154 ♦ What about shadows? 154
- 10.2 Light node 155
- Light properties 155
- 10.3 AmbientLight 157
- 10.4 DirectionalLight 157
- 10.5 PointLight 157
- 10.6 SpotLight 158
- 10.7 Lighting, material attributes, and per-vertex colors 161
- 10.8 Summary 162
- 11 Behaviors—navigation, alignment, and LOD 163
- 11.1 Introduction 164
- 11.2 Behavior class 165
- Scheduling bounds 165 ♦ Enable State 166 ♦ WakeUp Condition 166 ♦ processStimulus method 166 ♦ initialize method 166 ♦ When do Behaviors run? 166
- 11.3 Anatomy of a typical behavior 166
- Constructor 167 ♦ initialize method 167 ♦ processStimulus method 167
- 11.4 Overview of the built-in behaviors 167
- 11.5 Overview of Wakeup criteria 169
- WakeupCriterion 170 ♦ WakeupCondition 170 ♦ Summary 171
- 11.6 Using keyboard behaviors 172
- KeyNavigatorBehavior 173 ♦ Writing a simple keyboard behavior 174 ♦ Implementing DOOM and DOOM-style keyboard navigation 176 ♦ Conclusions 186
- 11.7 Using mouse behaviors 186
- Java 3D and the mouse 187 ♦ Building improved mouse behaviors 188
- 11.8 Billboard behavior 192
- 11.9 Using LOD behaviors 195
- DistanceLOD Class 195
- 11.10 Summary 197
- 12 Using Interpolator behaviors 198
- 12.1 The Interpolator class 198
- 12.2 The Alpha class 199
- Using a custom Alpha class 201 ♦ Summary 202
- 12.3 Example of Interpolator usage 203
- SwitchValueInterpolator 203 ♦ ColorInterpolator 204 ♦ PositionInterpolator 204 ♦ RotationInterpolator 205 ♦ ScaleInterpolator 205 ♦ TransparencyInterpolator 205 ♦ RotPosScalePathInterpolator 205 ♦ Design of the InterpolatorTest example 208
- 12.4 Using a cubic-spline interpolator 210
- Tension parameter 210 ♦ Continuity 211 ♦ Bias 211 ♦ The SplineInterpolatorTest example 211 ♦ Creating the LOD behavior 214 ♦ Reading spline key frames from disk 215 ♦ Creating the texture-mapped sky backdrop 218 ♦ Controlling the extent of the audio for the helicopters 218
- 12.5 Summary 219
- 13 Writing custom behaviors 220
- 13.1 The BehaviorTest example 220
- 13.2 ObjectSizeBehavior 221
- 13.3 ExplodeBehavior 224
- 13.4 StretchBehavior 227
- 13.5 Using behaviors for debugging 230
- Calculating the rendered FPS using a behavior 231
- 13.6 Summary 232
- 14 Using texture images 234
- 14.1 Introduction 235
- Static mapping using per-vertex texture coordinates 237 ♦ Dynamic mapping using TexCoordGeneration 245
- 14.2 3D texture coordinates 251
- 14.3 Texture and multiple levels of detail 252
- Boundary color 252 ♦ Boundary mode 252 ♦ Setting the image 253 ♦ MIPMAP mode, filter, and multiple texture images 253
- 14.4 TextureAttributes 257
- Blend color 257 Mode 258 Transform 260
- 14.5 Using transparent geometry with transparent texture images 262
- 14.6 Animated (video) texture mapping 265
- 14.7 Summary 266
- 15 Geometry utility classes and object loaders 267
- 15.1 Introduction 267
- 15.2 Triangulator, normal vector generator, stripifier 268
- 15.3 Object loaders 270
- LoaderBase 270 SceneBase interface 270 Using the ObjectFile loader 271 Third-party object loaders 273
- 15.4 Summary 274
- 16 Object interaction—picking and collision detection 275
- 16.1 Introduction to picking 275
- 16.2 PickShapes 276
- 16.3 PickTool 277
- 16.4 PickCanvas 278
- 16.5 PickIntersection 278
- 16.6 PickResult 279
- 16.7 VRML picking example 280
- 16.8 Using picking for collision detection 293
- 16.9 Conclusions 300
- 17 Java 3D, Swing, and applets 301
- 17.1 Building the Java 3D Swing application 301
- 17.2 Adding support for running as an applet 318
- Original HTML applet code 319 ♦ Using the Java 2 plug-in HTMLConverter 320 ♦ The end-user experience 321 ♦ Automatic Java 3D installation 323 ♦ Applets and security 324
- 17.3 Conclusions 324
- 18 Java 3D system architecture 325
- 18.1 Introduction 325
- 18.2 Threads running a Java 3D application 326
- Native Windows threads running a Java 3D application 327
- 18.3 MasterControl 327
- System properties read by Java 3D 335
- 18.4 BehaviorScheduler 335
- 18.5 InputDeviceScheduler 336
- 18.6 Renderer 336
- GraphicsContext3D commands 337 ♦ RenderAtoms and RenderMolecule 337
- 18.7 StructureUpdateThread 338
- 18.8 TimerThread 338
- 18.9 SceneGraphObject 338
- 18.10 Node types 339
- 18.11 Exception Strings 340
- 18.12 J3D DLL 340
- Exported methods 340 ♦ Imported methods 344
- 18.13 Summary 348
- A Example code 349
- A.1 List of examples 349
- A.2 Installation notes 351
- A.3 Instructions for running the examples 352
- Running applet examples 352
- B Programming and graphics resources online 353
- C Primitives, the geometry cache, and GeomBuffer 358
- C.1 Box objects and GeomBuffer 358
- C.2 Primitives and the geometry cache 362
- C.3 GeomBuffer 363
 
bibliography 365
index 367
DESCRIPTION
Java 3D Programming steps programmers through the important design and implementation phases of developing a successful Java 3D application. The book provides invaluable guidance on whether to use Java 3D, user interface design, geometry creation, scene manipulation and final optimizations. The book does not attempt to exhaustively cover the API or replicate the official documentation but rather serves as a roadmap to alert programmers of design issues and potential pitfalls.
The author distills 12 months of using the Java 3D API for commercial projects, as well as innumerable discussions on the Java 3D email list into a book that all Java 3D developers will appreciate. Experienced Java 3D developers will applaud an authoritative resource containing the state-of-the-art in techniques and workarounds, while novice Java 3D programmers will gain a fast-track into Java 3D development, avoiding the confusion, frustration and time wasted learning Java 3D techniques and terminology.
Java 3D Programming comes complete with a comprehensive set of programming examples to illustrate the techniques, features, workarounds and bug fixes contained in the main text.
Readers of this book would include students and postgraduate researchers developing visualization applications for academia. Moderately experienced in Java, some experience of 3D graphics, little or no experience of Java 3D is needed. R+D s/w engineers at commercial institutions. Experienced Java developers, experienced with OpenGL or VRML, little or no experience with Java 3D.
ABOUT THE AUTHOR...
Daniel Selman is a Staff Engineer for BEA System, working on personalization technology for scalable J2EE applications, and specification lead for JSR-94, the Java Rule Engine API.
As Managing Director of Tornado Labs Limited, he worked on commercial projects using the Java 3D API. He has written modeling applications for CAD visualization and facial modeling/animation tools using OpenGL and C++. He has a B.S. in Civil Engineering with Computing and an M.S. in Artificial Intelligence.

