1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
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);
geo.convertToIndexedTriangles();
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;
}
}
|