O'Reilly Book Excerpts: Killer Game Programming in Java
Killer Game Programming in Java: A 3D Checkerboard, Part 2
Editor's note: In part one of this two-part excerpt from Killer Game Programming in Java, author Andrew Davison strode through some complex programming issues for developing Java 3D graphics, such as how to add shapes, lighting, and backgrounds to a Checkers3D application. Here in part two, Andrew continues the theme by demonstrating how to create a floating sphere for the Checkers3D app.
The floor is made of tiles created with my
ColouredTiles class, and axis labels made with the Java 3D
Text2D utility class. Figure 15-5 shows the floor branch, previously hidden inside a "Floor Branch" box in Figure 15-3.
Figure 15-5. Floor branch of the scene graph
The floor subgraph is constructed with an instance of my
CheckerFloor class and made available via the
getBG( ) method:
sceneBG.addChild( new CheckerFloor( ).getBG( ) ); // add the floor
CheckerFloor( ) constructor uses nested
for loops to initialize two
blueCoords list contains all the coordinates for the blue tiles, and
greenCoords holds the coordinates for the green tiles. Once the
ArrayLists are filled, they are passed to
ColouredTiles objects, along with the color that should be used to render the tiles. A
ColouredTiles object is a subclass of
Shape3D, so can be added directly to the floor's graph:
floorBG.addChild( new ColouredTiles(blueCoords, blue) ); floorBG.addChild( new ColouredTiles(greenCoords, green) );
The red square at the origin (visible in Figure 15-1) is made in a similar way:
Point3f p1 = new Point3f(-0.25f, 0.01f, 0.25f); Point3f p2 = new Point3f(0.25f, 0.01f, 0.25f); Point3f p3 = new Point3f(0.25f, 0.01f, -0.25f); Point3f p4 = new Point3f(-0.25f, 0.01f, -0.25f); ArrayList oCoords = new ArrayList( ); oCoords.add(p1); oCoords.add(p2); oCoords.add(p3); oCoords.add(p4); floorBG.addChild( new ColouredTiles(oCoords, medRed) );
The square is centered at (0, 0) on the XZ plane and raised a little above the y-axis (0.01 units) so it's visible above the tiles.
Each side of the square is the length of 0.5 units. The four
Point3f points in the
ArrayList are stored in a counterclockwise order. This is true for each group of four points in
greenCoords. Figure 15-6 shows the ordering of the square's points.
Figure 15-6. OrigMarker, viewed from above