From fa19896765311f809d2cf8b21b31bfcee8be4856 Mon Sep 17 00:00:00 2001 From: Phillip Date: Thu, 10 Mar 2011 22:32:17 +0000 Subject: Tank model build --- src/tesseract/objects/tank/Body.java | 75 +++++++++++++++++++++++++++++ src/tesseract/objects/tank/Track.java | 90 +++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) create mode 100644 src/tesseract/objects/tank/Body.java create mode 100644 src/tesseract/objects/tank/Track.java (limited to 'src/tesseract') diff --git a/src/tesseract/objects/tank/Body.java b/src/tesseract/objects/tank/Body.java new file mode 100644 index 0000000..73c1962 --- /dev/null +++ b/src/tesseract/objects/tank/Body.java @@ -0,0 +1,75 @@ +package tesseract.objects.tank; + +import java.awt.Color; + +import javax.media.j3d.Appearance; +import javax.media.j3d.ColoringAttributes; +import javax.media.j3d.Group; +import javax.media.j3d.Material; +import javax.media.j3d.Shape3D; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Color3f; +import javax.vecmath.Vector3f; + +import com.sun.j3d.utils.geometry.Box; +import com.sun.j3d.utils.geometry.Cylinder; +import com.sun.j3d.utils.geometry.Primitive; +import com.sun.j3d.utils.geometry.Sphere; + +public class Body { + private static final float width = 1.35f; + private static final float height = .45f; + private static final float depth = .9f; + private static float radius = .75f; + private static float gunRad = .075f; + private static float gunLength = 2f; + + public static TransformGroup[] makeBody(Color trackColor, Color bodyColor, float theScale) { + TransformGroup tank = new TransformGroup(); + Appearance appearance = new Appearance(); + Material material = new Material(); + material.setDiffuseColor(new Color3f(bodyColor)); + appearance.setColoringAttributes(new ColoringAttributes(new Color3f(bodyColor), ColoringAttributes.NICEST)); + appearance.setMaterial(material); + Primitive box = new Box(width * theScale, height * theScale, + depth * theScale, appearance); + Transform3D trackMove = new Transform3D(); + Transform3D downward = new Transform3D(); + downward.setTranslation(new Vector3f(0, (-height / 1.125f) * theScale,0)); + trackMove.setTranslation(new Vector3f(0, 0, depth * theScale)); + trackMove.mul(downward); + Shape3D leftTrack = Track.makeTrack(theScale, trackColor, trackMove); + trackMove = new Transform3D(); + trackMove.setTranslation(new Vector3f(0, 0, -depth * theScale)); + trackMove.mul(downward); + Shape3D rightTrack = Track.makeTrack(theScale, trackColor, trackMove); + //Shape3D body = new Shape3D(); + //body.removeAllGeometries(); + Transform3D turretMove = new Transform3D(); + turretMove.setTranslation(new Vector3f(0, height * theScale, 0)); + tank.addChild(box); + tank.addChild(leftTrack); + tank.addChild(rightTrack); + makeTurret(appearance, theScale, turretMove); + TransformGroup turret = makeTurret(appearance, theScale, turretMove); + TransformGroup[] tankNturret = {tank, turret}; + return tankNturret; + } + public static TransformGroup makeTurret(Appearance theApperance, float theScale, Transform3D toMove) { + + TransformGroup tg = new TransformGroup(); + TransformGroup gunTG = new TransformGroup(); + Primitive sphere = new Sphere(radius * theScale, theApperance); + Primitive gun = new Cylinder(gunRad * theScale, gunLength * theScale, theApperance); + gunTG.addChild(gun); + Transform3D mg = new Transform3D(); + mg.rotZ(Math.PI / 2); + mg.setTranslation(new Vector3f(1.4f * theScale, .25f * theScale, 0)); + gunTG.setTransform(mg); + tg.addChild(sphere); + tg.addChild(gunTG); + tg.setTransform(toMove); + return tg; + } +} diff --git a/src/tesseract/objects/tank/Track.java b/src/tesseract/objects/tank/Track.java new file mode 100644 index 0000000..c9ad634 --- /dev/null +++ b/src/tesseract/objects/tank/Track.java @@ -0,0 +1,90 @@ +package tesseract.objects.tank; + +import java.awt.Color; + +import javax.media.j3d.Appearance; +import javax.media.j3d.ColoringAttributes; +import javax.media.j3d.GeometryArray; +import javax.media.j3d.Material; +import javax.media.j3d.QuadArray; +import javax.media.j3d.Shape3D; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Color3f; +import javax.vecmath.Point3f; + +import com.sun.j3d.utils.geometry.GeometryInfo; +import com.sun.j3d.utils.geometry.NormalGenerator; + +public class Track { + + private Track(){} + + public static Shape3D makeTrack(final float theScale, final Color theColor, + final Transform3D toMove) { + Point3f[] points = new Point3f[8]; + points[0] = new Point3f(-2f, .75f, .25f); + points[1] = new Point3f(-2f, .75f, -.25f); + points[2] = new Point3f(2f, .75f, -.25f); + points[3] = new Point3f(2f, .75f, .25f); + points[4] = new Point3f(-1.25f, -.25f, .25f); + points[5] = new Point3f(-1.25f, -.25f, -.25f); + points[6] = new Point3f(1.25f, -.25f, -.25f); + points[7] = new Point3f(1.25f, -.25f, .25f); + for (int it = 0; it < points.length; it++) { + points[it].scale(theScale); + } + for (int it = 0; it < points.length; it++) { + toMove.transform(points[it]); + } + QuadArray track = new QuadArray(24, GeometryArray.COORDINATES); + int index = 0; + track.setCoordinate(index++, points[3]); + track.setCoordinate(index++, points[2]); + track.setCoordinate(index++, points[1]); + track.setCoordinate(index++, points[0]); + + track.setCoordinate(index++, points[4]); + track.setCoordinate(index++, points[5]); + track.setCoordinate(index++, points[6]); + track.setCoordinate(index++, points[7]); + + track.setCoordinate(index++, points[4]); + track.setCoordinate(index++, points[7]); + track.setCoordinate(index++, points[3]); + track.setCoordinate(index++, points[0]); + + track.setCoordinate(index++, points[1]); + track.setCoordinate(index++, points[2]); + track.setCoordinate(index++, points[6]); + track.setCoordinate(index++, points[5]); + + track.setCoordinate(index++, points[0]); + track.setCoordinate(index++, points[1]); + track.setCoordinate(index++, points[5]); + track.setCoordinate(index++, points[4]); + + track.setCoordinate(index++, points[2]); + track.setCoordinate(index++, points[3]); + track.setCoordinate(index++, points[7]); + track.setCoordinate(index++, points[6]); + + //TransformGroup trans = new TransformGroup(); + NormalGenerator norms = new NormalGenerator(120); + GeometryInfo geo = new GeometryInfo(track); + norms.generateNormals(geo); + + Shape3D mesh = new Shape3D(geo.getGeometryArray()); + Appearance meshApp = new Appearance(); + Material surface = new Material(); + surface.setDiffuseColor(new Color3f (theColor)); + meshApp.setMaterial(surface); + meshApp.setColoringAttributes(new ColoringAttributes(new Color3f (theColor), + ColoringAttributes.NICEST)); + mesh.setAppearance(meshApp); + //trans.addChild(mesh); + //trans.addChild(new Shape3D(die2)); + //trans.addChild(new Shape3D(points)); + return mesh; + } +} -- cgit v1.2.3