//Contains common 3D stuff import java.awt.*; public class ThreeDApplet extends BufferedApplet { long time0; int w, h, count = 0; //EXTEND THESE public void init() { super.init(); w = bounds().width; h = bounds().height; time0 = System.currentTimeMillis(); //start the clock } public void render(Graphics g) { count = tick(); //set clock animate(); draw(g); animating = true; } //OVERRIDE THESE void draw(Graphics g) {} void animate() {} public void drawShape(Graphics g, graphics.Shape s) { //loop through each face for (int fi = 0; fi < s.numFaces(); fi++) { int[] face = s.getFace(fi); //copy from vertices to points double[][] points = new double[face.length][6]; for (int i = 0; i1, 1->2, 2->0) g.drawLine( x(triangle[0][0]), y(triangle[0][1]), x(triangle[1][0]), y(triangle[1][1]) ); g.drawLine( x(triangle[1][0]), y(triangle[1][1]), x(triangle[2][0]), y(triangle[2][1]) ); g.drawLine( x(triangle[2][0]), y(triangle[2][1]), x(triangle[0][0]), y(triangle[0][1]) ); } //draws quad as two triangles public void drawQuad(Graphics g, double[][] quad) { double[][] triangle = new double[3][3]; //3 points with 3 values each //(0->1, 1->2, 2->0) triangle[0] = quad[0]; //1st point of triangle triangle[1] = quad[1]; //2nd point of triangle triangle[2] = quad[2]; //3rd point of triangle drawTriangle(g, triangle); //(2->3, 3->0, 0->2) triangle[0] = quad[2]; //1st point of triangle triangle[1] = quad[3]; //2nd point of triangle triangle[2] = quad[0]; //3rd point of triangle drawTriangle(g, triangle); } //projection stuff int x(double t) { return w/2 + (int)(t*w/4); } int y(double t) { return h/2 - (int)(t*w/4); } private int tick() { long time = System.currentTimeMillis(); double elapsed = (time - time0) / 1000.0; return (int)(30 * elapsed); } }