import java.awt.;
import java.awt.event.;
import java.io.IOException;
import net.java.games.jogl.*;
public class TextureDemo {
public static void main(String[] args) {
Frame frame = new Frame(“Texture Demo”);
GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
canvas.addGLEventListener(new TextureRenderer(args[0]));
frame.add(canvas);
frame.setSize(640, 480);
final Animator animator = new Animator(canvas);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
animator.stop();
System.out.println();
System.exit(0);
}
});
animator.start();
frame.show();
}
static class TextureRenderer
implements GLEventListener {
private GL gl;
private GLU glu;
private GLDrawable gldrawable;
private TextureLoader texloader;
private Texture texture;
private float xrot, yrot, xspeed = 1, yspeed = 1,
z = -20.0f;
private float[] ambient = { 0.5f, 0.5f, 0.5f, 1.0f };
private float[] diffuse = { 1.0f, 1.0f, 1.0f, 1.0f };
private float[] position = { 0.0f, 0.0f, 2.0f, 1.0f };
private String resource;
private int f;
private long t1 , t2;
public TextureRenderer(String resource) {
this.resource = resource;
}
public void init(GLDrawable drawable) {
gl = drawable.getGL();
this.gldrawable = drawable;
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glShadeModel(GL.GL_SMOOTH);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthFunc(GL.GL_LEQUAL);
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
gl.glEnable(GL.GL_LIGHT1);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_DIFFUSE, diffuse);
gl.glLightfv(GL.GL_LIGHT1, GL.GL_POSITION, position);
gl.glEnable(GL.GL_LIGHTING);
try {
texloader = new TextureLoader(gl, glu);
texture = texloader.getTexture("texture01", resource);
} catch (IOException e) { }
t1 = System.currentTimeMillis();
}
public void reshape(GLDrawable drawable, int x, int y, int width, int height) {
float h = (float)height / (float)width;
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustum(-1.0f, 1.0f, -h, h, 5.0f, 100.0f);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -50.0f);
}
public void display(GLDrawable drawable) {
f++;
t2 = System.currentTimeMillis();
if (t2 - t1 > 500) {
float fps = (int)((float)f / (t2 - t1) * 10000)/10f;
System.out.print( (char)13 + "" + fps + "fps" + '\t');
f = 0;
t1 = t2;
}
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, z);
gl.glRotatef(xrot, 1.0f, 0.0f, 0.0f);
gl.glRotatef(yrot, 0.0f, 1.0f, 0.0f);
texture.bind(gl);
gl.glBegin(GL.GL_QUADS);
// Front Face
gl.glNormal3f( 0.0f, 0.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
// Back Face
gl.glNormal3f( 0.0f, 0.0f,-1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
// Top Face
gl.glNormal3f( 0.0f, 1.0f, 0.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
// Bottom Face
gl.glNormal3f( 0.0f,-1.0f, 0.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
// Right face
gl.glNormal3f( 1.0f, 0.0f, 0.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, -1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
// Left Face
gl.glNormal3f(-1.0f, 0.0f, 0.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, -1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, -1.0f);
gl.glEnd();
xrot += xspeed;
yrot += yspeed;
}
public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged) {}
}
}