package BeispielTexturen;
import java.awt.image.BufferedImage;
import net.java.games.jogl.*;
/**
* @author Melanie Klein & Stefan Jouaux
*/
public class BeispielszeneView implements GLEventListener
{
/*
* (non-Javadoc)
*
* @see net.java.games.jogl.GLEventListener#init(net.java.games.jogl.GLDrawable)
*/
public void init(GLDrawable arg0)
{
GL gl = arg0.getGL();
GLU glu = arg0.getGLU();
setCamera(gl, glu);
setLight(gl);
defineTexture(gl,glu);
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glMatrixMode(GL.GL_MODELVIEW);
}
/**
* @param gl
*/
private void setCamera(GL gl, GLU glu)
{
int w = 500, h = 500;
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(50.0, 1, 2.0, 40.0);
}
/*
* (non-Javadoc)
*
* @see net.java.games.jogl.GLEventListener#display(net.java.games.jogl.GLDrawable)
*/
public void display(GLDrawable arg0)
{
GL gl = arg0.getGL();
GLU glu = arg0.getGLU();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
glu.gluLookAt(0,12, 19,
0, 0, 0,
0, 1, 0);
gl.glTranslated(0, 1, 0);
drawField(gl, glu);
setMaterial(gl,0);
drawFigure(gl,glu,0,0);
setMaterial(gl,1);
drawFigure(gl,glu,-4,2);
setMaterial(gl,2);
drawFigure(gl,glu,3,-5);
setMaterial(gl,3);
drawFigure(gl,glu,3,2);
}
/*
* (non-Javadoc)
*
* @see net.java.games.jogl.GLEventListener#reshape(net.java.games.jogl.GLDrawable,
* int, int, int, int)
*/
public void reshape(GLDrawable arg0, int arg1, int arg2, int arg3, int arg4)
{
// display(arg0);
}
/*
* (non-Javadoc)
*
* @see net.java.games.jogl.GLEventListener#displayChanged(net.java.games.jogl.GLDrawable,
* boolean, boolean)
*/
public void displayChanged(GLDrawable arg0, boolean arg1, boolean arg2)
{
// display(arg0);
}
public void drawField(GL gl, GLU glu)
{
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glBindTexture(GL.GL_TEXTURE_2D, texture);
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(0f,0f);
gl.glVertex3f(-6.5f, -1.5f, -6.5f);
gl.glTexCoord2f(1f,0f);
gl.glVertex3f(-6.5f, -1.5f, 6.5f);
gl.glTexCoord2f(1f,1f);
gl.glVertex3f(6.5f, -1.5f, 6.5f);
gl.glTexCoord2f(0f,1f);
gl.glVertex3f(6.5f, -1.5f, -6.5f);
gl.glEnd();
gl.glDisable(GL.GL_TEXTURE_2D);
}
int slices=30;
int stacks=30;
public void drawFigure(GL gl, GLU glu, float x,float z)
{
gl.glPushMatrix();
gl.glTranslated(x, 0, z);
GLUquadric qobj = glu.gluNewQuadric();
glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
glu.gluSphere(qobj, .36f, slices, stacks);
gl.glRotated(90, 1, 0, 0);
glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
glu.gluCylinder(qobj, .1, .4, 1.2, 30, 30);
gl.glTranslated(0, 0, 1.2f);
glu.gluQuadricDrawStyle(qobj, GLU.GLU_FILL);
glu.gluQuadricNormals(qobj, GLU.GLU_SMOOTH);
glu.gluCylinder(qobj, .4, .4, .2, 30, 30);
gl.glPopMatrix();
}
private void setLight(GL gl)
{
float light_pos[] = { 0, 2f, 5, 0f };
float light_color_am[] = { 1, 1, 1, 1 };
float light_color_diff[] = { 1, 1, 1, 1 };
float light_color_spec[] = { 1f, 1, 1, 1 };
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, light_pos);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, light_color_am);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, light_color_diff);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, light_color_spec);
gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_SMOOTH);
}
private void setMaterial(GL gl, int i)
{
if(i==0)
{
float mat_ambient[] = { 0.2f, 0f, 0f, 1.0f };
float mat_diffuse[] = { 0.7f, 0f, 0, 1.0f };
float mat_specular[] = { 0.50f, 0.50f, 0.50f, 1.0f };
float mat_shininess = 32f;
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, mat_ambient);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, mat_diffuse);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, mat_specular);
gl.glMaterialf(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS,mat_shininess);
}
if(i==1)
{
float mat_ambient[] = { .2f, 0f, 0f, 1.0f };
float mat_diffuse[] = { 1f, 1f, 0.5f, 1.0f };
float mat_specular[] = { 0.5f, 0.5f, 0.5f, 1.0f };
float mat_shininess = 32f;
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, mat_ambient);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, mat_diffuse);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, mat_specular);
gl.glMaterialf(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS,mat_shininess);
}
if(i==2)
{
float mat_ambient[] = { 0.2f, 0f, 0f, 1.0f };
float mat_diffuse[] = { 0.25f, 1f, .0f, 1.0f };
float mat_specular[] = { 0.50f, 0.50f, 0.50f, 1.0f };
float mat_shininess = 32f;
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, mat_ambient);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, mat_diffuse);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, mat_specular);
gl.glMaterialf(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS,mat_shininess);
}
if(i==3)
{
float mat_ambient[] = { .1f, .1f, .1f, 1.0f };
float mat_diffuse[] = { 0f, 0f, .7f, 1.0f };
float mat_specular[] = { 0.50f, 0.50f, 0.50f, 1.0f };
float mat_shininess = 32f;
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, mat_ambient);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, mat_diffuse);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, mat_specular);
gl.glMaterialf(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS,mat_shininess);
}
}
private int texture;
public void defineTexture(GL gl,GLU glu)
{
gl.glShadeModel(GL.GL_SMOOTH); // Enable Smooth Shading
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); // Really Nice Perspective Calculations
texture = TextureGenerator.genTexture(gl);
gl.glBindTexture(GL.GL_TEXTURE_2D,texture);
BufferedImage img = TextureGenerator.readPNGImage("spielfeld2.png");
TextureGenerator.makeRGBTexture(gl, glu, img, GL.GL_TEXTURE_2D, false);
gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MIN_FILTER,GL.GL_LINEAR);
gl.glTexParameteri(GL.GL_TEXTURE_2D,GL.GL_TEXTURE_MAG_FILTER,GL.GL_LINEAR);
gl.glTexEnvf(GL.GL_TEXTURE_ENV,GL.GL_TEXTURE_ENV_MODE,GL.GL_REPLACE);
}
}