import java.applet.Applet; import java.awt.*; import java.awt.event.*; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.behaviors.keyboard.*; import javax.media.j3d.*; import javax.vecmath.*; public class Asukoht3 extends Applet { public Asukoht3() { setLayout(new BorderLayout()); Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); Canvas tasapind=new Canvas(); setLayout(new GridLayout(2, 1)); add(tasapind); add(c); BranchGroup juur = new BranchGroup(); for(int i=1; i<1000; i++){ Transform3D t3=new Transform3D(); t3.setTranslation(new Vector3f((float)(100*Math.random()-50), (float)(100*Math.random()-50), (float)(100*Math.random()-50))); TransformGroup tg=new TransformGroup(t3); tg.addChild(new ColorCube(0.4)); juur.addChild(tg); } SimpleUniverse u = new SimpleUniverse(c); TransformGroup tg=u.getViewingPlatform().getViewPlatformTransform(); Klahvikuular k=new Klahvikuular(tg, tasapind); c.addKeyListener(k); Background taust=new Background(new Color3f(Color.blue)); //sinine taust taust.setApplicationBounds(new BoundingSphere(new Point3d(), 1000)); juur.addChild(taust); u.addBranchGraph(juur); c.requestFocus(); } public static void main(String[] args) { Frame f=new Frame("Kuubid taevas"); f.add(new Asukoht3()); f.setSize(400, 600); f.setVisible(true); } class Klahvikuular implements KeyListener{ TransformGroup siht; Canvas louend; Transform3D t=new Transform3D(); float x, y, z, vahe=0.1f; public Klahvikuular(TransformGroup tg1, Canvas l1){ siht=tg1; louend=l1; } public void keyPressed(KeyEvent e){ int klahv=e.getKeyCode(); if(klahv==KeyEvent.VK_RIGHT)x+=vahe; if(klahv==KeyEvent.VK_LEFT)x-=vahe; if(klahv==KeyEvent.VK_UP)z-=vahe; if(klahv==KeyEvent.VK_DOWN)z+=vahe; if(klahv==KeyEvent.VK_PAGE_UP)y+=vahe; if(klahv==KeyEvent.VK_PAGE_DOWN)y-=vahe; t.setTranslation(new Vector3f(x, y, z)); siht.setTransform(t); Graphics g=louend.getGraphics(); g.setColor(new Color(230, 230, 230)); g.fillRect(0, 0, louend.getWidth(), louend.getHeight()); int varv=100+(int)(10*y); //vastavalt kõrgusele arvutatakse värv if(varv<10)varv=10; if(varv>240)varv=240; g.setColor(new Color(100, 100, varv)); g.drawString((int)x+" "+(int)y+" "+(int)z ,100+(int)(10*x), 100+(int)(10*z)); //x-z tasandile joonistatakse y väärtus } public void keyReleased(KeyEvent e){ } public void keyTyped(KeyEvent e){} } }