Reviews : Java Books : 3D User Interfaces with Java 3D :


Title: 3D User Interfaces with Java 3D
ISBN: 1884777902
US Price: $49.95
© Manning Publications Co.

Observe

  • All target operations use mouseover to enable the operation.
  • The three orthogonal planes are the source objects for WRM dragging.
  • The left (red) target uses full WRM coordinate mapping, meaning that target manipulation occurs relative to the source planes throughout the operation. The drag will only start and continue as long as the cursor stays over a source plane.
  • The middle (green) target uses quasi-WRM coordinate mapping, meaning that target manipulation occurs relative to the source plane at the start of the operation. The drag must start over a source plane but can continue beyond it because it uses a picking plane.
  • The bottom (blue) target uses pseudo-WRM coordinate mapping, meaning that target manipulation occurs relative to a predefined source object, specifically the bottom plane. The drag does not rely on the source planes to start or continue.
  • For WRM and quasi-WRM translation, at drag start the target origin jumps to the source position under the cursor. The target does not appear stuck to the cursor throughout the drag.
  • For pseudo-WRM translation, the target does not jump, and it appears stuck to the cursor throughout the drag regardless of viewing angle.

The first code sample following is from the WrmMapping example class. It shows only those portions that pertain to WRM manipulation. Notice that absolute input dragging is used, and that the three orthogonal planes in the scene serve as the source objects. The utility building blocks buildWrmTranslationMapper, buildWrmSpher-eMapper, and buildStickWrmTranslationMapper from the IntuitiveBlocks class provide WRM mapping, which are also shown below. The first two blocks take a WrmPlugin as one of its input parameters, and combine it with other intuitive map-ping blocks, including source space relative origin filtering, to form modules specialized for a given type of geometric manipulation. The third block combines a target picker and a PseudoWrmDragPlugin in a convenient package for WRM dragging with a sticky cursor.

Notice that the WRM source picker is configured so that all hits are checked, not just the closest one. For true WRM, this allows picking during the drag to correctly determine the hit position on the underlying source planes even when the target object is dragged behind other target objects.

Setup for various forms of WRM mapping
Filename: J3duiBook/ examples/ OverEnabling/ WrmMapping. java
	
...
// setup WRM 
/// build source plane X 
... 
/// build source plane Y 
... 
/// build source plane Z 
... 
/// build source picker 
ArrayList wrmSourceList = new ArrayList(); 
wrmSourceList.add( planeX); 
wrmSourceList.add( planeY); 
wrmSourceList.add( planeZ); 

PickEngine wrmSourcePicker = new PickEngine( 
 getWorld().getSceneRoot(), wrmSourceList); 
wrmSourcePicker.setHitAll(true); 

// setup manipulation controls 
/// translation draggers, first button 
InputDragSplitter absXlate = new InputDragSplitter(); 

ActuationBlocks.buildAbsoluteDragger(absXlate, 
	 getView(), Input.BUTTON_FIRST, 
 Input.MODIFIER_NONE, Input.MODIFIER_NONE); 
... 


/// manipulation mappers 
InputDragTarget mapper; 

//// WRM: world translation, source rotation 
mapper = IntuitiveBlocks.buildWrmTranslationMapper( 
 affineWrm, new WrmDragPlugin(null, wrmSourcePicker), 
 false, false); 
absXlate.addEventTarget(mapper); 

mapper = IntuitiveBlocks.buildWrmSphereMapper( 
sphereWrm, new WrmDragPlugin(wrmSourcePicker), 
	true, true); 
absRotate.addEventTarget(mapper); 

//// Quasi-WRM: world translation, source rotation 
mapper = IntuitiveBlocks.buildWrmTranslationMapper( 
 affineQWrm, new QuasiWrmDragPlugin(null, 
 wrmSourcePicker), false, false); 
absXlate.addEventTarget(mapper); 

mapper = IntuitiveBlocks.buildWrmSphereMapper( 
 sphereQWrm, new QuasiWrmDragPlugin(wrmSourcePicker), 
 true, true); 
absRotate.addEventTarget(mapper); 

//// Pseudo-WRM: picked translation, fixed rotation 
mapper = IntuitiveBlocks.buildStickyWrmTranslationMapper( 
 planeY, affinePWrm, getWorld().getSceneRoot(), 
 true, true); 
absXlate.addEventTarget(mapper); 

mapper = IntuitiveBlocks.buildWrmSphereMapper( 
 spherePWrm, new PseudoWrmDragPlugin(planeY, 
 affinePWrm), true, true); 
absRotate.addEventTarget(mapper); 
...
	

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.