Newsletter sign-up
View all newsletters

Enterprise Java Newsletter
Stay up to date on the latest tutorials and Java community news posted on JavaWorld

Sponsored Links

Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs

3D graphics programming in Java: Part 2, Advanced Java 3D

Learn more about Java 3D performance, 3D content loaders, and the Java 3D VRML97 browser

  • Print
  • Feedback

Page 5 of 6

  • Java 3D VRML97 source code, available from the VRML Consortium (see Resources). The latest source snapshot, in latest_src.jar, is approximately 1.5 MB and requires compilation before you can use it.

  • Java 3D VRML97 browser built using the most recent public Java 3D release, available directly from Sun at the Java Developer Connection (see Resources). Be sure to choose the version of the browser packaged for your platform. For example, for the Win32 release corresponding with Java 3D 1.1 Beta 2, I downloaded v9711-beta2-win32.exe, approximately 970 KB.



As with our previous installation of the Java 3D runtime itself, you may also want to download and install the VRML97 browser documentation and examples. Both are available from Sun or the VRML working group. Assuming you download and install the Sun packaged VRML97 browser, the class files will be placed in the /jre/lib/ext directory discussed in last month's column. The browser classes are archived in vrml97.jar.

You can test out your installation of the VRML97 browser by loading the default world, a cube similar to our previous OBJ content. Do this by changing into the VRML97 examples directory and executing the Vrml97Viewer application.

Vrml97Viewer displays the default simple.wrl cube.
The browser provides basic menu commands and allows the user
to rotate and examine the loaded object.

Performance, performance, performance!

A slow 3D graphics runtime is useless. Every ounce of speed that can be squeezed out should be squeezed out, except of course for concessions pertaining to usability and understandability (though some graphics programmers might even disagree with that).

With OpenGL being the longstanding champion of cross-platform, high-performance 3D graphics, Java 3D has a certain heritage to live up to if it is to be accepted by graphics aficionados. Sun has made every effort to see that it has a chance to meet those expectations. Because implementation-specific optimizations are subject to rapid change, I've decided not to go into great detail here. Sun does a good job of documenting its performance decisions anyway; please refer to the company's Performance Guide (see Resources) for details. I have instead decided to illustrate the obvious and important parts of the API that help to boost performance.

In Sun's own words, some of the major performance-related API features are:

  • Capability bits
  • Compilation of BranchGroups and SharedGroups
  • Bounds
  • Unordered rendering


We briefly covered capability bits last month. In a nutshell, they allow the Java 3D runtime to optimize the scene graph for faster rendering performance. They work in concert with compilation, which I'll discuss in greater detail in a moment.

You will no doubt encounter capability bits at some point when you attempt to modify something and receive a compile-time exception from Java 3D. In order to work around the exception, you must set one or more capability bits. These tell the runtime that you will want to modify some portion of the scene graph at a later time, and thus, that it cannot optimize away your ability to do so.

  • Print
  • Feedback

Resources
  • Sun has made its "Java 3D 1.1 Performance Guide" available on its product site. This guide provides some short tips and tricks developers can heed to speed up their Java 3D applications. http://www.sun.com/desktop/java3d/collateral/j3d_perfguide.html
  • The home page for the Java 3D and VRML working group provides links to download the Java 3D VRML browser. http://www.vrml.org/WorkingGroups/vrml-java3d/
  • You can download the Java 3D VRML97 browser from the Java Developer Connection (free registration required). http://developer.java.sun.com/developer/earlyAccess/java3D/index.html
  • VRML97 is an international standard, officially designated ISO/IEC 14772-1:1997. The complete standard specification is available from the VRML Consortium Web site. http://www.vrml.org/Specifications/VRML97/
  • Get information on Transform3D with the API spec and documentation. API specification
    javadocs
  • If you need more information on how transforms are actually applied using matrix mathematics, I recommend the classic computer graphics primer "Introduction to Computer Graphics" (Addison-Wesley, ISBN0201609215). http://www1.clbooks.com/asp/bookinfo/bookinfo.asp?theisbn=0201609215
  • The Java 3D Archive links to loaders and shapes for use with Java 3D. You can use Java 3D loader software to read in models from common 3D file formats and translate them into a scene graph that the Java 3D runtime can render. The archive was assembled through the efforts of Matt Robinson, who has since passed its maintenance on to me. http://reality.sgi.com/bday/Java3DArchives/index.html
  • NCSA's Portfolio provides a consistent interface for loading many popular 3D modeling formats into the Java 3D runtime. It also supports domain-specific loaders for formats such as Protein Data Bank (PDB). Portfolio provides an implementation of Canvas3D, which is able to save snapshots into JPEG files. These files can then be used to make MPEG movies of Java 3D worlds. http://havefun.ncsa.uiuc.edu/Java3D/portfolio/
  • For more on the Java 3D API performance-oriented features, see "Introduction to Programming with Java 3D." http://www.sdsc.edu/~nadeau/Courses/SDSCjava3d/
  • JavaWorld has published several good VRML-related articles. In addition to the two below, be sure to visit the JavaWorld Topical Index for more VRML-related information.
  • "3D computer graphicsGetting the hang of VRML"
  • "Why Java and VRML?"
  • http://www.javaworld.com/topicalindex/jw-ti-vrml.html
  • The Java 3D mailing list archive stores lots of useful tips and tricks. Please search here before posting new questions to the list. http://java.sun.com/products/java-media/mail-archive/3D/index.html
  • Allen McPherson has made some example code available to help in the visual debugging of normal problems. http://java.sun.com/products/java-media/mail-archive/3D/1860.html
  • Learn how to get the frame rate from the Java 3D rendering engine. http://java.sun.com/products/java-media/mail-archive/3D/0093.html
  • Tips on coaxing Java 3D applets to run inside your Web browser. Includes step-by-step instructions for installing and configuring the Java 2 platform (formerly Java 1.2) and Java 3D to work with Netscape's browser. http://java.sun.com/products/java-media/mail-archive/3D/1212.html
  • Need to know the bounding volumes used by the Java 3D VRML97 browser? Try this sample code. http://java.sun.com/products/java-media/mail-archive/3D/1063.html
  • Read about an interesting real-world use of Java 3D and VRML, Nearlife's Virtual Fishtank. The article contains a special sidebar on Java 3D and the fishtank. http://java.sun.com/features/1998/11/fishtank.html
  • Download source code and classes for this column. http://www.javaworld.com/jw-01-1999/media/jw-01-media.jar
  • I've archived Media Programming resources on my Web site. This archive contains the up-to-date media.jar file with code fixes for all the examples in the column. http://reality.sgi.com/bday/Work/index.html
  • Read all my previous Media Programming columns. http://www.javaworld.com/topicalindex/jw-ti-media.html