import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
public class Show
{
private int frames;
private long time;
private int fps=0;
private float lightAmbient[] = { 1.0f, 1.0f, 1.0f, 1.0f };
private float lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
private float lightPosition[] = { 0.0f, 5.0f, 0.0f, 1.0f };
private DisplayMode displayMode;
private static int list;
public Show()
{
try
{
displayMode = org.lwjgl.util.Display.getAvailableDisplayModes(800,600,800,600,32,32,60,60)[0];
Display.setDisplayMode(displayMode);
Display.create();
}
catch(LWJGLException e)
{
System.out.println(e.getMessage());
}
initGL();
initLight();
blockErzeugen(0,0,0,1);
time = System.currentTimeMillis();
while(!Display.isCloseRequested())
{
//Spiel Zyklus
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glLoadIdentity();
render();
Display.setTitle(""+fps);
Display.update();
}
Display.destroy();
System.exit(0);
}
public void fpsberechnen()
{
frames++;
if(time+1000<=System.currentTimeMillis())
{
fps = frames;
frames=0;
time = System.currentTimeMillis();
}
}
public void render()
{
fpsberechnen();
blockZeigen();
}
private void blockZeigen()
{
GL11.glTranslatef(0, 0, -10);
GL11.glRotatef(45, 1.0f, 0.0f, 0.0f);
GL11.glRotatef(45, 0.0f, 1.0f, 0.0f);
GL11.glCallList(list);
GL11.glRotatef(-45, 0.0f, 1.0f, 0.0f);
GL11.glRotatef(-45, 1.0f, 0.0f, 0.0f);
GL11.glTranslatef(0, 0, 10);
}
private void initGL(){
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0);
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glViewport(0,0,displayMode.getWidth(),displayMode.getHeight());
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(45.0f,(float) displayMode.getWidth() / (float) displayMode.getHeight(),0.1f,100.0f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
}
private void blockErzeugen(float x, float y, float z,float r)
{
list = GL11.glGenLists(1);
GL11.glNewList(list, GL11.GL_COMPILE);
{
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor4f(1, 1, 1, 1);
//Oben
GL11.glNormal3f(0,1,0);
GL11.glTexCoord2f(1f,1f);
GL11.glVertex3f(x+r,y+r,z+r);
GL11.glTexCoord2f(0f,1f);
GL11.glVertex3f(x-r,y+r,z+r);
GL11.glTexCoord2f(0,0);
GL11.glVertex3f(x-r,y+r,z-r);
GL11.glTexCoord2f(1f,0f);
GL11.glVertex3f(x+r,y+r,z-r);
//Unten
GL11.glNormal3f(0,-1,0);
GL11.glTexCoord2f(1f,1f);
GL11.glVertex3f(x+r,y-r,z+r);
GL11.glTexCoord2f(0f,1f);
GL11.glVertex3f(x-r,y-r,z+r);
GL11.glTexCoord2f(0,0);
GL11.glVertex3f(x-r,y-r,z-r);
GL11.glTexCoord2f(1f,0f);
GL11.glVertex3f(x+r,y-r,z-r);
// Hinten
GL11.glNormal3f(0,0,-1);
GL11.glTexCoord2f(1f,0f);
GL11.glVertex3f(x-r,y+r,z-r);
GL11.glTexCoord2f(0f,0f);
GL11.glVertex3f(x+r,y+r,z-r);
GL11.glTexCoord2f(0f,1f);
GL11.glVertex3f(x+r,y-r,z-r);
GL11.glTexCoord2f(1f,1f);
GL11.glVertex3f(x-r,y-r,z-r);
//Vorne
GL11.glNormal3f(0,0,1);
GL11.glTexCoord2f(0f,0f);
GL11.glVertex3f(x-r,y+r,z+r);
GL11.glTexCoord2f(1f,0f);
GL11.glVertex3f(x+r,y+r,z+r);
GL11.glTexCoord2f(1f,1f);
GL11.glVertex3f(x+r,y-r,z+r);
GL11.glTexCoord2f(0f,1f);
GL11.glVertex3f(x-r,y-r,z+r);
//Links
GL11.glNormal3f(-1,0,0);
GL11.glTexCoord2f(1f,0f);
GL11.glVertex3f(x-r,y+r,z+r);
GL11.glTexCoord2f(1f,1f);
GL11.glVertex3f(x-r,y-r,z+r);
GL11.glTexCoord2f(0f,1f);
GL11.glVertex3f(x-r,y-r,z-r);
GL11.glTexCoord2f(0f,0f);
GL11.glVertex3f(x-r,y+r,z-r);
//Rechts
GL11.glNormal3f(1,0,0);
GL11.glTexCoord2f(0f,0f);
GL11.glVertex3f(x+r,y+r,z+r);
GL11.glTexCoord2f(0f,1f);
GL11.glVertex3f(x+r,y-r,z+r);
GL11.glTexCoord2f(1f,1f);
GL11.glVertex3f(x+r,y-r,z-r);
GL11.glTexCoord2f(1f,0f);
GL11.glVertex3f(x+r,y+r,z-r);
GL11.glEnd();
}
GL11.glEndList();
}
private void initLight()
{
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_COLOR_MATERIAL);
GL11.glColorMaterial(GL11.GL_FRONT, GL11.GL_DIFFUSE);
ByteBuffer temp = ByteBuffer.allocateDirect(16);
temp.order(ByteOrder.nativeOrder());
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip());
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip());
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip());
GL11.glEnable(GL11.GL_LIGHT1);
}
public static void main(String[] args)
{
new Show();
}
}