From cceae491ced7d1c5aacb4a466bdc79e8de367bc7 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 11 Jan 2010 16:37:05 +0100 Subject: Started Renderer --- src/de/gamezock/metacraft/ui/Main.java | 137 +++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/de/gamezock/metacraft/ui/Main.java (limited to 'src/de/gamezock/metacraft/ui/Main.java') diff --git a/src/de/gamezock/metacraft/ui/Main.java b/src/de/gamezock/metacraft/ui/Main.java new file mode 100644 index 0000000..a721feb --- /dev/null +++ b/src/de/gamezock/metacraft/ui/Main.java @@ -0,0 +1,137 @@ +package de.gamezock.metacraft.ui; + +import java.awt.Frame; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.media.opengl.GL; +import javax.media.opengl.GL2; +import javax.media.opengl.GLAutoDrawable; +import javax.media.opengl.GLCapabilities; +import javax.media.opengl.GLEventListener; +import javax.media.opengl.GLProfile; +import javax.media.opengl.awt.GLCanvas; +import javax.media.opengl.glu.GLU; + +import de.gamezock.metacraft.data.Map; + +public class Main implements GLEventListener { + private Renderer renderer = new Renderer(this); + + private Frame frame = new Frame("metacraft"); + /*private*/ GLCanvas canvas; + + private GLU glu = new GLU(); + + private Map currentMap = new Map(); + + public Main() { + GLCapabilities caps = new GLCapabilities(GLProfile.get(GLProfile.GL2)); + caps.setHardwareAccelerated(true); + caps.setDoubleBuffered(true); + + canvas = new GLCanvas(caps); + canvas.addGLEventListener(this); + + frame.add(canvas); + frame.setSize(800, 600); + frame.setResizable(false); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + quit(); + } + }); + + frame.setVisible(true); + + } + + Map getCurrentMap() { + return currentMap; + } + + @Override + public void display(GLAutoDrawable drawable) { + renderer.render(drawable.getGL().getGL2()); + } + + @Override + public void dispose(GLAutoDrawable drawable) { + } + + @Override + public void init(GLAutoDrawable drawable) { + GL2 gl = drawable.getGL().getGL2(); + + gl.glShadeModel(GL2.GL_SMOOTH); + gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + gl.glClearDepth(1.0f); + gl.glEnable(GL.GL_DEPTH_TEST); + gl.glDepthFunc(GL.GL_LEQUAL); + gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); + + gl.glEnable(GL2.GL_LIGHTING); + + gl.glColorMaterial(GL.GL_FRONT, GL2.GL_AMBIENT_AND_DIFFUSE); + + gl.glMatrixMode(GL2.GL_MODELVIEW); + glu.gluLookAt(0, -10, -25, 0, 0, 0, 0, 1, 0); + + gl.glEnable(GL2.GL_LIGHT0); + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, new float[] {0, 0, 0, 1}, 0); + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, new float[] {0.5f, 0.5f, 0.5f, 1}, 0); + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, new float[] {0, 0, 0, 0}, 0); + gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, new float[] {10, 10, 10, 1}, 0); + + gl.glMaterialfv(GL.GL_FRONT, GL2.GL_SPECULAR, new float[] {0, 0, 0, 0}, 0); + } + + @Override + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + GL2 gl = drawable.getGL().getGL2(); + + if(height <= 0) { + height = 1; + } + + float aspect = (float)width / (float)height; + gl.glMatrixMode(GL2.GL_PROJECTION); + gl.glLoadIdentity(); + glu.gluPerspective(50.0f, aspect, 0.1, 1000.0); + + gl.glMatrixMode(GL2.GL_MODELVIEW); + } + + public void quit() { + frame.dispose(); + System.exit(0); + } + + /** + * @param args + */ + public static void main(String[] args) { + final Main main = new Main(); + + try { + Thread.sleep(500); + } catch (InterruptedException e) { + } + + new Thread(new Runnable() { + + @Override + public void run() { + while(true) { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + + main.canvas.display(); + } + } + + }).start(); + } +} -- cgit v1.2.3