package kskb;
import static org.lwjgl.opengl.GL11.GL_ALPHA_TEST;
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST;
import static org.lwjgl.opengl.GL11.GL_LIGHT0;
import static org.lwjgl.opengl.GL11.GL_MODELVIEW;
import static org.lwjgl.opengl.GL11.GL_NO_ERROR;
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_PROJECTION;
import static org.lwjgl.opengl.GL11.GL_PROJECTION_MATRIX;
import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
import static org.lwjgl.opengl.GL11.GL_VERTEX_ARRAY;
import static org.lwjgl.opengl.GL11.glBlendFunc;
import static org.lwjgl.opengl.GL11.glClear;
import static org.lwjgl.opengl.GL11.glClearColor;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glEnableClientState;
import static org.lwjgl.opengl.GL11.glGetError;
import static org.lwjgl.opengl.GL11.glGetFloat;
import static org.lwjgl.opengl.GL11.glLoadIdentity;
import static org.lwjgl.opengl.GL11.glLoadMatrix;
import static org.lwjgl.opengl.GL11.glMatrixMode;
import static org.lwjgl.opengl.GL11.glOrtho;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.gluErrorString;
import static org.lwjgl.util.glu.GLU.gluPerspective;
import java.nio.FloatBuffer;
import javax.swing.JOptionPane;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
public class Root {
public static final int FENSTER_BREITE = 800;
public static final int FENSTER_HOEHE = 600;
public static final int FOV = 60;
public static final float ZNEAR = 0.1f;
public static final float ZFAR = 100;
private static int fps;
private static int drawingFps;
private static long lastFPS;
private static World world;
private static FloatBuffer perspectiveProjectionMatrix = BufferUtils.createFloatBuffer(16);
private static FloatBuffer orthographicProjectionMatrix = BufferUtils.createFloatBuffer(16);
public static void main(String[] args) {
System.err.println("Starte Grafikinitialisierung");
createWindow();
initGl();
System.err.println("Starte Weltinitialisierung");
createWorld();
lastFPS = getTime();
System.err.println("Starte Hauptschleife");
while (!Display.isCloseRequested()) {
draw();
updateFPS();
Display.setTitle("FPS: " + drawingFps);
Display.update();
}
end(0);
}
private static void createWindow(){
try {
Display.setDisplayMode(new DisplayMode(FENSTER_BREITE, FENSTER_HOEHE));
Display.setTitle("FPS: " + drawingFps);
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
end(1);
}
}
private static void createWorld() {
world = new World();
}
public static void end(int c) {
Display.destroy();
System.exit(c);
}
private static void draw(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(180, 0, 1, 0);
glTranslatef(-15f, -10f, -25f);
world.draw();
}
public static long getTime() {
return (Sys.getTime() * 1000) / Sys.getTimerResolution();
}
private static void initGl() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective((float) FOV, (float) FENSTER_BREITE / (float) FENSTER_HOEHE, ZNEAR, ZFAR);
glMatrixMode(GL_MODELVIEW);
glGetFloat(GL_PROJECTION_MATRIX, perspectiveProjectionMatrix);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, Display.getWidth(), Display.getHeight(), 0, 1, -1);
glGetFloat(GL_PROJECTION_MATRIX, orthographicProjectionMatrix);
glLoadMatrix(perspectiveProjectionMatrix);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_ALPHA_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHT0);
glClearColor(0.15f, 0.15f, 1f, 0.0f);
glEnableClientState(GL_VERTEX_ARRAY);
}
private static void updateFPS() {
if (getTime() - lastFPS > 1000) {
lastFPS += 1000;
drawingFps = fps;
fps = 0;
}
fps++;
System.out.println(getTime());
}
}