The Joy of Java 3D
by Greg Hopkins
Copyright © 2001
Introduction
Java 3D is an addition
to Java for displaying three-dimensional graphics. Programs written in Java 3D
can be run on several different types of computer and over the internet.
The Java 3D class
library provides a simpler interface than most other graphics libraries, but
has enough capabilities to produce good games and animation. Java 3D builds on
existing technology such as DirectX and OpenGL so the programs do not run as
slowly as you might expect. Also, Java 3D can incorporate objects created by 3D
modeling packages like TrueSpace and VRML models.
This tutorial is an
introduction to Java 3D. Examples lead you through the basic methods for
producing 3D images and animation. You do not need to have any knowledge of 3D
graphics or Java 3D to learn from this tutorial, but it will help if you have a
basic understanding of the Java programming language. Programming in three
dimensions can seem complicated because of the amount of jargon and the
mathematics involved, this tutorial will keep things as simple as possible.
Please help to improve
this tutorial for future readers by reporting any mistakes you find or
suggesting improvements to editor@java3d.org.
Installing and Running Java 3D
The software you need to
use Java 3D is available free from Sun Microsystems at http://java.sun.com/.
Sun often releases new
versions so it is better to look at their site than rely on this document to
find what you need. You will have to register as a member of "Java
Developer Connection" to download some of the files.
At time of writing the
newest version of Java itself (1.3) was at http://java.sun.com/j2se/ and the current version of the Java 3D extension
(1.2.1) was athttp://java.sun.com/products/java-media/3D/. Netscape and Internet Explorer both require
you to download plug-ins if you want to use up-to-date versions of Java and
Java3D, the plug-in can be found at http://java.sun.com/products/plugin/.
Once you have installed
Java and Java 3D you can compile programs using the command:
javac FileName.java
And run them using:
java FileName
The FileName should
always be the same as the name of the class defined in that file. In some
versions of Java 3D you may get a message about a null graphics configuration,
but you can just ignore this.
Getting Started - Your
First Program
|
The following program shows you
the basic steps needed to display 3D objects.
|
![]() |
Look at the Hello3d()
constructor and you will see the five lines that perform each of these steps.
The program displays a glowing cube, the viewer is looking directly at the red
face of the cube, so what you actually see is a red square on a black
background
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import javax.media.j3d.BranchGroup;
public class Hello3d {
public Hello3d()
{
SimpleUniverse universe = new SimpleUniverse();
BranchGroup group = new BranchGroup();
group.addChild(new ColorCube(0.3));
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(group);
}
public static void main( String[] args ) {
new Hello3d();
}
} // end of class Hello3d
The import statements at
the beginning of this program use various parts of Java 3D, so compiling and
running this program is a good test that you have installed Java 3D correctly.
Lighting up the World
|
OK, the first example was a good
start, but was it 3D? If you don�t think a square qualifies as three-dimensional, you are
going to need to add some lights to your universe. The way the light falls on
an object provides us with the shading that helps us see shapes in three
dimensions
The next example illustrates how
to display a ball lit by a red light:
|
![]() |
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class Ball {
public Ball() {
// Create the universe
SimpleUniverse universe = new SimpleUniverse();
// Create a structure to contain objects
BranchGroup group = new BranchGroup();
// Create a ball and add it to the group of
objects
Sphere sphere = new Sphere(0.5f);
group.addChild(sphere);
// Create a red light that shines for 100m from
the origin
Color3f light1Color = new Color3f(1.8f, 0.1f,
0.1f);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0),
100.0);
Vector3f light1Direction = new Vector3f(4.0f,
-7.0f, -12.0f);
DirectionalLight light1
= new
DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
group.addChild(light1);
// look towards the ball
universe.getViewingPlatform().setNominalViewingTransform();
// add the group of objects to the Universe
universe.addBranchGraph(group);
}
public static void main(String[] args) { new Ball(); }
}
The sphere we created is
white (the default), it appears red because of the colored light. Since it is a
DirectionalLight, we also have to specify how far the light shines and in what
direction. In the example, the light shines for 100 meters from the origin and
the direction is to the right, down and into the screen (this is defined by the
vector: 4.0 right, -7.0 down, and -12.0 into the screen).
You can also create an
AmbientLight which will produce a directionless light, or a SpotLight if you
want to focus on a particular part of your scene. A combination of a strong
directional light and a weaker ambient light gives a natural-looking appearance
to your scene. Java 3D lights do not produce shadows.


Comments
Post a Comment