//Title: robot_arm.java //Version: //Copyright: Copyright (c) 2001 //Author: SyGem Software import java.awt.*; import java.applet.*; import com.sygem.jazz3d3.*; import com.sygem.jazz3d3.primitive.Cube3d; import com.sygem.jazz3d3.primitive.Checkerboard3d; public class robot_arm extends Applet implements Runnable { Thread m_ce; World myWorld; int light1; int pid,pid2; int arm1_id; int arm2_id; int arm3_id; boolean antialias = false; boolean bilinear = false; //Construct the applet public robot_arm() { } //Initialize the applet public void init() { resize(400,300); myWorld = new World(this); setLayout(new BorderLayout()); add("Center", myWorld); myWorld.setDelay(0); RenderSolid g_shader = new RenderSolid(); Checkerboard3d base = new Checkerboard3d(2,2,0,-0.5,10); base.scaleObject(2,2,2); base.rotateWorld(90,0,0); base.setRenderer(g_shader); Cube3d parent = new Cube3d(0,-0.4,10); parent.scaleObject(1,0.2,1); parent.setColour(255,0,0); parent.setRenderer(g_shader); Cube3d arm1 = new Cube3d(0,0.2,10); arm1.scaleObject(0.1,1,0.1); arm1.setColour(0,255,0); Cube3d arm2 = new Cube3d(0.46,0.7,10); arm2.setColour(0,0,255); arm2.scaleObject(1,0.08,0.08); Cube3d arm3 = new Cube3d(0.92,0.45,10); arm3.setColour(255,255,0); arm3.scaleObject(0.06,0.5,0.06); arm3_id = arm2.addChild(arm3,0,0.21,0); arm2_id = arm1.addChild(arm2,-0.46,0,0); arm1_id = parent.addChild(arm1,0,0.2,0); pid = myWorld.addObject(base); pid2 = myWorld.addObject(parent); Light temp_light = new Light(0,-0.5,0.5); light1 = myWorld.addLight(temp_light); myWorld.getCamera().translateWorld(0,6,1); myWorld.getCamera().pointAt(myWorld.getObject(pid2)); } //Start the applet public void start() { if (m_ce == null) { m_ce = new Thread(this); m_ce.start(); } } //Stop the applet public void stop() { if (m_ce != null) { m_ce.stop(); m_ce = null; } } //Destroy the applet public void destroy() { } public void run() { int iCount = 0; long lTime0 = System.currentTimeMillis(); myWorld.prep(); while (true) { myWorld.getObject(pid2).rotateWorld(0,2,0); myWorld.getObject(arm1_id).rotateLocal(0,-4,0); myWorld.getObject(arm2_id).rotateLocal(0,1,1); myWorld.getObject(arm3_id).rotateLocal(1,0,-3); myWorld.getCamera().pointAt(myWorld.getObject(arm3_id)); myWorld.redraw(); iCount++; if((iCount%50) == 0) { lTime0-= System.currentTimeMillis(); lTime0 =-lTime0; getAppletContext().showStatus((50000./lTime0)+" frames/second"); lTime0 = System.currentTimeMillis(); } } } public boolean keyDown(Event evt,int key) { if ((char)key=='a') {antialias=!antialias; myWorld.setAntiAliasing(antialias); return true; } if ((char)key=='b') {bilinear=!bilinear; myWorld.setBilinear(bilinear); return true; } return true; } }