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
| import net.java.games.jogl.*; import net.java.games.jogl.util.GLUT; import java.awt.event.*; import javax.swing.*; import java.awt.*;
public class displacementMap implements KeyListener { initRenderer renderer; Animator loop; GLCanvas canvas; Terrain terrain; JFrame frame; boolean keys[] = new boolean[255]; int screenWidth, screenHeight, canvasHeight, canvasWidth, xLocation, yLocation, list;
public static void main(String []args) { displacementMap demo = new displacementMap(); }
displacementMap(){ int fullScreen = JOptionPane.showConfirmDialog( null, "Would you like to run in fullscreen mode?", "Fullscreen", JOptionPane.YES_NO_OPTION); if(fullScreen!=0) JFrame.setDefaultLookAndFeelDecorated(true);
frame = new JFrame("Displacement map"); screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
switch(fullScreen){ case 0: frame.setUndecorated(true); break; default: canvasWidth = 640; canvasHeight = 480; xLocation = (screenWidth - canvasWidth )>>1; yLocation = (screenHeight - canvasHeight)>>1; frame.setLocation(xLocation,yLocation); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); canvas.setSize(new Dimension(canvasWidth,canvasHeight)); canvas.addGLEventListener((renderer = new initRenderer())); canvas.addKeyListener(this); canvas.requestFocus();
frame.getContentPane().add(canvas,BorderLayout.CENTER); frame.addWindowListener(new shutDownWindow()); frame.addKeyListener(this);
if(fullScreen==0){ GraphicsEnvironment.getLocalGraphicsEnvironment(). getDefaultScreenDevice().setFullScreenWindow(frame); GraphicsEnvironment.getLocalGraphicsEnvironment(). getDefaultScreenDevice().setDisplayMode((new DisplayMode(640, 480, 32, DisplayMode.REFRESH_RATE_UNKNOWN))); } else frame.pack(); frame.setVisible(true); }
public class initRenderer implements GLEventListener { public void init(GLDrawable drawable){ GL gl = drawable.getGL();
terrain = new Terrain(frame, "Data/height.jpg", "Data/texture.jpg"); gl.glEnableClientState(gl.GL_VERTEX_ARRAY); gl.glEnableClientState(gl.GL_COLOR_ARRAY); gl.glNewList((list = gl.glGenLists(1)),gl.GL_COMPILE); gl.glVertexPointer(3, gl.GL_FLOAT, 0, terrain.vertexData); gl.glColorPointer( 3, gl.GL_FLOAT, 0, terrain.colorData ); gl.glDrawElements(gl.GL_TRIANGLES, terrain.vertexIndices.length,gl.GL_UNSIGNED_INT, terrain.vertexIndices); gl.glEndList(); loop = new Animator(drawable); loop.start(); }
public void display(GLDrawable drawable){ GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT ); gl.glLoadIdentity(); glu.gluLookAt(96,196,250, 96,0,96,0,1,0); gl.glCallList(list); }
public void reshape(GLDrawable drawable, int xstart,int ystart, int width, int height){ GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); height = (height == 0) ? 1 : height;
gl.glViewport(0,0,width,height); gl.glMatrixMode(gl.GL_PROJECTION); gl.glLoadIdentity();
glu.gluPerspective(50.0f,(float)width/height,10.f,1700.0f); gl.glMatrixMode(gl.GL_MODELVIEW); gl.glLoadIdentity(); }
public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged){} }
public void processKeyboard(){}
public void keyReleased(KeyEvent evt){ keys[evt.getKeyCode()] = false; }
public void keyPressed (KeyEvent evt){ keys[evt.getKeyCode()] = true;
if(keys[KeyEvent.VK_ESCAPE]){ loop.stop(); System.exit(0); } }
public void keyTyped (KeyEvent evt){}
public class shutDownWindow extends WindowAdapter { public void windowClosing(WindowEvent e) { loop.stop(); } } } |