Introduction | p. xix |
Acknowledgments | p. xxv |
About the cover illustration | p. xxvi |
3D: the next generation | p. 1 |
What's in a name? | p. 3 |
The application | p. 4 |
The familiar | p. 4 |
The dream | p. 4 |
The reality | p. 5 |
The rebirth | p. 5 |
The user interface | p. 6 |
The primal | p. 6 |
The virtual | p. 6 |
The analytical | p. 7 |
The computer system | p. 8 |
The Plain Old Computer System | p. 8 |
The mouse | p. 9 |
The keyboard | p. 9 |
Summary | p. 10 |
Patterns and constraints | p. 12 |
Application patterns | p. 12 |
Design applications | p. 13 |
Simulation applications | p. 14 |
Analysis applications | p. 15 |
Control applications | p. 16 |
Application constraints | p. 17 |
Goldilocks and the three dees | p. 17 |
Let gravity pull | p. 18 |
Creating your own reality | p. 19 |
Flavors of constraint | p. 19 |
Summary | p. 21 |
Spaces and relations | p. 23 |
Space, the initial frontier | p. 23 |
The world | p. 24 |
The view | p. 24 |
The display | p. 26 |
The screen | p. 27 |
Spatial coordinates | p. 27 |
Right-handed system | p. 28 |
Position | p. 28 |
Rotation | p. 28 |
Mouse coordinates | p. 29 |
Spatial relationships | p. 31 |
External view geometry | p. 31 |
Internal view geometry | p. 33 |
Summary | p. 37 |
3D user interface techniques | p. 39 |
Control | p. 41 |
Physical input devices | p. 42 |
The keyboard | p. 43 |
The mouse | p. 45 |
Input interpretation | p. 46 |
Asking the right questions | p. 46 |
Other interpretations | p. 47 |
Control personae | p. 47 |
Control basics | p. 48 |
Control primitives | p. 49 |
Mouse gestures | p. 51 |
Target actuation | p. 55 |
Coordinate mapping | p. 57 |
Movement, objects, and views | p. 58 |
Direct mapping | p. 60 |
Intuitive mapping | p. 64 |
Source and target space | p. 64 |
Display-relative mapping | p. 65 |
World-relative mapping | p. 66 |
Object picking | p. 69 |
Mixed usage | p. 70 |
Summary | p. 70 |
Feedback | p. 72 |
Feedback roles | p. 73 |
Information feedback | p. 75 |
Control feedback | p. 77 |
Basic elements | p. 79 |
Identifiers | p. 80 |
Callouts | p. 81 |
Tooltips | p. 82 |
Indicators | p. 82 |
Handles | p. 84 |
Cursor | p. 85 |
Audio | p. 86 |
Sound effects | p. 87 |
Visual attributes | p. 87 |
Simple dynamics | p. 88 |
Action-centric feedback | p. 90 |
Object-centric feedback | p. 90 |
Task-centric feedback | p. 91 |
Interaction states | p. 91 |
State definitions | p. 93 |
Multi-Shape | p. 97 |
Summary | p. 98 |
Visualization | p. 100 |
Data visualization | p. 101 |
Feedback visual attributes | p. 103 |
Distinction | p. 104 |
Size | p. 105 |
Orientation | p. 107 |
Visibility | p. 107 |
Density | p. 109 |
Display space techniques | p. 110 |
Display layout | p. 110 |
Overlay, underlay, and overlap | p. 111 |
Pseudo-display overlay | p. 113 |
World space techniques | p. 114 |
Display facing | p. 114 |
Constant size | p. 115 |
World overlay | p. 116 |
Perfect overlay | p. 117 |
Revealment | p. 117 |
Multiple views | p. 121 |
Overviews | p. 122 |
Summary | p. 124 |
Navigation | p. 125 |
Forms of navigation | p. 126 |
Spatial navigation | p. 126 |
Contextual navigation | p. 129 |
Camera techniques | p. 132 |
Manual control | p. 133 |
Assisted control | p. 137 |
Scripted control | p. 143 |
Summary | p. 146 |
Manipulation | p. 148 |
Control personae | p. 149 |
First person | p. 150 |
Second person | p. 151 |
Third person | p. 152 |
Feedback elements | p. 154 |
Feelers | p. 155 |
Projections | p. 156 |
Skirts | p. 157 |
Shadows | p. 158 |
Outlines | p. 158 |
dxTic marks | p. 159 |
Rulers | p. 160 |
Snaps | p. 161 |
Pseudo-tactile feedback | p. 162 |
Marked drag | p. 163 |
Sticky drag | p. 164 |
Snap drag | p. 165 |
Solid drag | p. 165 |
Strong grip | p. 166 |
Weak grip | p. 166 |
Snapping | p. 166 |
Explicit versus implicit | p. 167 |
Snap operations | p. 167 |
Snap typing | p. 170 |
Snap geometry | p. 170 |
Attachment | p. 170 |
Physical versus logical | p. 172 |
Attachment versus snapping | p. 172 |
Attachment operations | p. 172 |
Detachment operations | p. 173 |
Gluing | p. 173 |
Sticking | p. 174 |
Linking | p. 174 |
Anchoring | p. 175 |
Specification | p. 175 |
Dumb shapes | p. 176 |
Smart shapes | p. 176 |
Configuration | p. 178 |
Summary | p. 179 |
Access | p. 180 |
In-scene grouping | p. 181 |
Physical versus logical | p. 181 |
Grouping operations | p. 182 |
Ungrouping operations | p. 183 |
Out-of-scene access | p. 184 |
Data presentation | p. 185 |
Non-Spatial Access | p. 186 |
Data palette | p. 188 |
Data catalog | p. 189 |
Data preview | p. 191 |
Search | p. 192 |
Data transfer | p. 192 |
Data instantiation | p. 193 |
Nonobject access | p. 193 |
Data basket | p. 193 |
Teleport | p. 195 |
3D drag-and-drop | p. 195 |
Summary | p. 199 |
Java 3D user interface essentials | p. 201 |
Java 3D introduction | p. 203 |
What is Java 3D? | p. 203 |
Where is Swing 3D? | p. 204 |
Just an introduction | p. 205 |
3D UI roadmap | p. 205 |
Java 3D and its friends | p. 208 |
Java 3D resources | p. 208 |
A moving target | p. 209 |
Summary | p. 210 |
UI spaces and the scene graph | p. 211 |
3D UI spaces | p. 212 |
The universe | p. 213 |
The world | p. 214 |
The view | p. 214 |
The display | p. 215 |
The screen | p. 217 |
Scene graph, et al. | p. 217 |
Scene graph basics | p. 217 |
Sharing subgraphs | p. 219 |
Group nodes | p. 220 |
Spatial transforms | p. 221 |
Leaf nodes | p. 221 |
Node bounds | p. 222 |
Logistics and optimization | p. 224 |
Dead or alive | p. 224 |
Capability bits | p. 225 |
BranchGroup and compilation | p. 225 |
Summary | p. 226 |
Lights, shapes, textures and sounds | p. 227 |
Lights | p. 228 |
Shapes | p. 229 |
Geometry | p. 229 |
Appearance | p. 231 |
Transparency | p. 232 |
Loading | p. 232 |
Textures | p. 233 |
Filtering | p. 233 |
Transparency | p. 234 |
Loading | p. 235 |
Sounds | p. 236 |
Loading | p. 237 |
Summary | p. 238 |
Actions and interactions | p. 239 |
Spatial transforms | p. 240 |
Local coordinates | p. 240 |
Transform3D | p. 241 |
getLocalToVworld | p. 244 |
Inverse getLocalToVworld | p. 246 |
Local-to-local | p. 247 |
Object picking | p. 247 |
Picking overview | p. 248 |
Picking quality | p. 248 |
Picking model | p. 250 |
Behaviors | p. 256 |
The behavior model | p. 256 |
User inputs | p. 258 |
Interpolators | p. 259 |
Collision detection | p. 259 |
Change detection | p. 261 |
Summary | p. 264 |
In a Java world | p. 266 |
Swing | p. 266 |
Heavyweight versus lightweight | p. 266 |
Mixing Java 3D and Swing | p. 267 |
Examples | p. 268 |
Drag-and-drop | p. 268 |
Drag-and-drop model | p. 269 |
3D drag-and-drop | p. 275 |
Applets | p. 278 |
Java 3D in applets | p. 278 |
Real-world issues | p. 280 |
Summary | p. 282 |
Java 3D framework and examples | p. 283 |
Why a framework? | p. 285 |
Approach | p. 286 |
Stick to the basics (when possible) | p. 286 |
Sun utilities | p. 286 |
Application utilities | p. 287 |
Progression of examples | p. 287 |
Javadoc and UML | p. 287 |
Software organization | p. 287 |
Running the examples | p. 289 |
Design patterns | p. 289 |
Event model generalities | p. 289 |
Event model specifics | p. 290 |
Building blocks | p. 291 |
Splitters | p. 292 |
Triggers | p. 292 |
Filters | p. 292 |
Mappers | p. 292 |
Plug-ins | p. 293 |
Convenience | p. 293 |
Optimization | p. 294 |
Garbage collection | p. 294 |
Many small building blocks | p. 295 |
Dragging, keying, and picking | p. 296 |
Double versus float | p. 296 |
Capabilities and compiling | p. 296 |
Summary | p. 297 |
Framework utilities | p. 298 |
Test objects | p. 299 |
Shapes | p. 299 |
Lights | p. 299 |
Application spaces | p. 300 |
AppWorld class | p. 300 |
AppViewclass | p. 300 |
AppDisplay class | p. 301 |
Example: SimpleApp | p. 302 |
Other utilities | p. 305 |
Building blocks | p. 305 |
Display printing | p. 306 |
Debug class | p. 306 |
Assert class | p. 307 |
ModelLoader class | p. 307 |
Summary | p. 308 |
Control basics | p. 309 |
Input sensors | p. 310 |
Input class | p. 310 |
InputSensor class | p. 313 |
MouseDragSensor class | p. 314 |
KeyboardArrowSensor class | p. 315 |
MouseMoveSensor class | p. 315 |
KeyboardModifierSensor class | p. 316 |
Example: InputSensors | p. 317 |
Input enabling | p. 322 |
InputModifierTrigger class | p. 324 |
Enable classes | p. 324 |
EnableInputDragFilter class | p. 324 |
Example: InputEnabling | p. 326 |
Input filtering | p. 328 |
Framework | p. 331 |
Example: InputFilters | p. 332 |
Summary | p. 334 |
Control actuation | p. 335 |
Target actuation | p. 336 |
Actuator class | p. 336 |
Outer and inner plug-ins | p. 338 |
ActuatorPlugin Class | p. 338 |
TGGeometryPlugin class | p. 343 |
ActuatorPlugin Revisited | p. 345 |
Basic coordinate mapping | p. 350 |
Basic requirements | p. 350 |
InputDragMapper class | p. 351 |
InputDragMapperPlugin class | p. 352 |
DirectInputDragPlugin Class | p. 353 |
InputDragMapper revisited | p. 355 |
Example: Actuators | p. 357 |
Actuator groups | p. 360 |
GroupChain Class | p. 361 |
ActuatorGroup class | p. 362 |
ActuatorTransformGroup class | p. 362 |
ActuatorTransformGroup subclasses | p. 363 |
Example: ActuatorGroups | p. 366 |
Summary | p. 368 |
Control intuition | p. 369 |
Object picking | p. 370 |
PickEngine class | p. 370 |
ObjectPickMapper class | p. 372 |
OverEnableMapper class | p. 373 |
Example: OverEnabling | p. 374 |
Intuitive mapping | p. 376 |
Source and target spaces | p. 377 |
Control chain spaces | p. 378 |
IntuitiveDragMapper class | p. 380 |
SourceDragFilter class | p. 380 |
SourceDragMapper class | p. 381 |
Display-relative mapping | p. 381 |
DrmDragPlugin class | p. 382 |
Example: DrmMapping | p. 383 |
World-relative mapping WRM | p. 386 |
WrmDragPlugin class | p. 386 |
QuasiWrmDragPlugin class | p. 388 |
PseudoWrmDragPlugin class | p. 389 |
Example: WrmMapping | p. 390 |
Summary | p. 395 |
Feedback | p. 397 |
Interaction feedback | p. 398 |
FeedbackTarget interface | p. 398 |
MultiShape class | p. 398 |
MultiShape subclasses | p. 399 |
FeedbackTrigger class | p. 400 |
FeedbackTrigger subclasses | p. 401 |
Example: MultiShaping | p. 402 |
Interaction management | p. 411 |
FeedbackManager class | p. 411 |
FeedbackMinion class | p. 412 |
FeedbackManager subclasses | p. 413 |
FeedbackGroupManager class | p. 413 |
Example: TargetSelecting | p. 415 |
Feedback elements | p. 419 |
TextureShape class | p. 420 |
TextureShape subclasses | p. 421 |
SoundEffect Class | p. 421 |
Example: TargetDecorating | p. 422 |
Summary | p. 428 |
Visualization | p. 429 |
Change detection | p. 430 |
Change poster model | p. 431 |
ChangePoster class | p. 432 |
World space techniques | p. 433 |
World space classes | p. 433 |
Example: DisplayFacing | p. 435 |
Example: ConstantSizing | p. 440 |
Example: WorldOverlaying | p. 441 |
Example: PerfectOverlaying | p. 443 |
Display space techniques | p. 446 |
Display space classes | p. 446 |
Example: DisplayOverlaying | p. 448 |
Multiple displays | p. 450 |
Example: MultiDisplaying | p. 451 |
Summary | p. 452 |
Manipulation | p. 453 |
Passive feelers | p. 453 |
Passive feeler classes | p. 454 |
Bounding box utilities | p. 454 |
Example: PassiveFeeling | p. 455 |
Manipulation personae | p. 461 |
A Better Way | p. 461 |
Example: SecondPerson | p. 462 |
Example: ThirdPerson | p. 468 |
Summary | p. 475 |
Access | p. 477 |
Java 3D and Swing | p. 477 |
FancyApp classes | p. 477 |
Example: FancyApp | p. 479 |
Java 3D and DnD | p. 485 |
DndApp classes | p. 485 |
Example: DndApp | p. 487 |
Summary | p. 487 |
Wrap-up | p. 488 |
Hindsight is perfect | p. 488 |
Event model | p. 489 |
Event routing | p. 489 |
Feedback model | p. 489 |
Input sensors | p. 489 |
The software | p. 490 |
Acronyms | p. 491 |
Index | p. 493 |
Table of Contents provided by Syndetics. All Rights Reserved. |
The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.
The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.