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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| import javax.vecmath.*;
import java.awt.*; import java.awt.event.*;
import com.xith3d.scenegraph.*; import com.xith3d.test.*; import com.xith3d.loaders.texture.*;
import com.xith3d.render.*; import com.xith3d.render.jogl.*;
public class SkyBox implements KeyListener { TransformGroup sbTG, cubeTG; Transform3D sbT, cubeT, v; Shape3D cube; Shape3D box; Vector3f eyeLoc = new Vector3f(0, 0, 10); View view; float angle; float speed = 0.02f; boolean db; public static void main (String args[]) { new SkyBox(); } public SkyBox() { db = false; VirtualUniverse universe = new VirtualUniverse(); view = new View(); universe.addView(view); Locale locale = new Locale(); universe.addLocale(locale); BranchGroup scene = new BranchGroup(); locale.addBranchGraph(scene); Texture2D skyTex; TextureLoader tl = new TextureLoader(); tl.registerPath("."); skyTex = (Texture2D)tl.getMinMapTexture("sky.png"); sbTG = new TransformGroup(); cubeTG = new TransformGroup(); scene.addChild(sbTG); scene.addChild(cubeTG); Geometry g1 = Cube.createCubeViaTriangles(0, 0, 0, 1, true); cube = new Shape3D(g1, new Appearance()); RenderingAttributes ra = new RenderingAttributes(); ra.setDepthBufferEnable(false); Appearance boxApp = new Appearance(); boxApp.setRenderingAttributes(ra); boxApp.setColoringAttributes( new ColoringAttributes( new Color3f(0.0f, 0.0f, 1.0f), ColoringAttributes.NICEST)); Geometry g2 = Cube.createCubeViaTriangles(0, 0, 0, 10, false); box = new Shape3D(g2, boxApp); sbTG.addChild(box); cubeTG.addChild(cube); sbT = new Transform3D(); cubeT = new Transform3D(); v = new Transform3D(); v.setTranslation(eyeLoc); sbT.setTranslation(eyeLoc); sbTG.setTransform(sbT); cubeT.setTranslation(new Vector3f(0f, 0f, -12f)); cubeTG.setTransform(cubeT); RenderPeer rp = new RenderPeerImpl(); CanvasPeer cp = rp.makeCanvas(null, 640, 480, 32, false); Canvas3D canvas = new Canvas3D(); canvas.set3DPeer(cp); Toolkit.getDefaultToolkit().addAWTEventListener( new EventListener(), AWTEvent.KEY_EVENT_MASK); view.addCanvas3D(canvas); view.getTransform().lookAt(eyeLoc, new Vector3f( 0, 0, 0), new Vector3f( 0, 1, 0)); while(true) { view.renderOnce(); } } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == e.VK_LEFT) { angle = (angle + speed) % 360; v.setTranslation(new Vector3f (0, 0, 0)); v.rotY(angle); v.setTranslation(eyeLoc); view.setTransform(v); sbT.setTranslation(eyeLoc); sbTG.setTransform(sbT); } if (e.getKeyCode() == e.VK_RIGHT) { angle = (angle - speed) % 360; v.setTranslation(new Vector3f (0, 0, 0)); v.rotY(angle); v.setTranslation(eyeLoc); view.setTransform(v); sbT.setTranslation(eyeLoc); sbTG.setTransform(sbT); } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } class EventListener implements AWTEventListener { public void eventDispatched(AWTEvent event) { if(event instanceof KeyEvent) { KeyEvent e = (KeyEvent) event; switch(e.getID()) { case KeyEvent.KEY_TYPED: keyTyped(e); break; case KeyEvent.KEY_PRESSED: keyPressed(e); break; case KeyEvent.KEY_RELEASED: keyReleased(e); break; } } } } } |