diff options
author | Phillip <pacardon@u.washington.edu> | 2011-03-10 22:32:17 +0000 |
---|---|---|
committer | Phillip <pacardon@u.washington.edu> | 2011-03-10 22:32:17 +0000 |
commit | fa19896765311f809d2cf8b21b31bfcee8be4856 (patch) | |
tree | a0b7c65e883a4d9a10d2b92211f032bcafee6f88 | |
parent | 8da3d4533033cf982634fbdeecb143502073f086 (diff) |
Tank model build
-rw-r--r-- | src/tesseract/objects/tank/Body.java | 75 | ||||
-rw-r--r-- | src/tesseract/objects/tank/Track.java | 90 |
2 files changed, 165 insertions, 0 deletions
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;
+ }
+}
|