From 880653d31a8f1ff8384fdbc75b84934bceecfdb8 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 18 Nov 2000 06:43:49 +0000 Subject: Initial revision --- demos/RonsDemos/texobj.java | 233 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 demos/RonsDemos/texobj.java (limited to 'demos/RonsDemos/texobj.java') diff --git a/demos/RonsDemos/texobj.java b/demos/RonsDemos/texobj.java new file mode 100644 index 0000000..49923a0 --- /dev/null +++ b/demos/RonsDemos/texobj.java @@ -0,0 +1,233 @@ +/** + * @(#) texobj.java + * @(#) author: Brian Paul (converted to Java by Ron Cemer) + */ + +import java.applet.*; +import java.awt.*; +import java.awt.event.*; +import java.lang.*; +import java.util.*; +import java.io.*; +import java.util.*; + +import gl4java.GLContext; +import gl4java.awt.GLAnimCanvas; +import gl4java.applet.SimpleGLAnimApplet1; + +public class texobj extends SimpleGLAnimApplet1 +{ + + /* Initialize the applet */ + + + public void init() + { + super.init(); + Dimension d = getSize(); + canvas = new texobjCanvas(d.width, d.height); + add("Center", canvas); + } + + + /* Local GLAnimCanvas extension class */ + + + private class texobjCanvas extends GLAnimCanvas + { + private int TexObj[]; + float Angle = 0.0f; + + public texobjCanvas(int w, int h) + { + super(w, h); + GLContext.gljNativeDebug = false; + GLContext.gljClassDebug = false; + setAnimateFps(30.0); + + TexObj = new int[2]; + } + + public void preInit() + { + doubleBuffer = true; + stereoView = false; + } + + public void init() + { + System.out.println("init(): " + this); + reshape(getSize().width, getSize().height); + + int width = 8, height = 8; + byte tex1[] = + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + byte tex2[] = + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 0, 0, 0, + 0, 0, 2, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 2, 2, 2, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + }; + byte tex[] = new byte[64*3]; + int i, j; + + gl.glDisable(GL_DITHER); + + /* Setup texturing */ + gl.glEnable(GL_TEXTURE_2D); + gl.glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL); + gl.glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_FASTEST); + + /* generate texture object IDs */ + gl.glGenTextures(2, TexObj); + + /* setup first texture object */ + gl.glBindTexture(GL_TEXTURE_2D, TexObj[0]); + /* red on white */ + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + int p = i*width+j; + if ((tex1[(height-i-1)*width+j]) != (byte)0) + { + tex[p*3] = (byte)255; + tex[(p*3)+1] = (byte)0; + tex[(p*3)+2] = (byte)0; + } + else + { + tex[p*3] = (byte)255; + tex[(p*3)+1] = (byte)255; + tex[(p*3)+2] = (byte)255; + } + } + } + gl.glTexImage2D + (GL_TEXTURE_2D, + 0, + 3, + width, + height, + 0, + GL_RGB, + GL_UNSIGNED_BYTE, + tex); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); + /* end of texture object */ + + /* setup second texture object */ + gl.glBindTexture(GL_TEXTURE_2D,TexObj[1]); + /* green on blue */ + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + { + int p = i*width+j; + if ((tex2[(height-i-1)*width+j]) != (byte)0) + { + tex[p*3] = (byte)0; + tex[(p*3)+1] = (byte)255; + tex[(p*3)+2] = (byte)0; + } + else + { + tex[p*3] = (byte)0; + tex[(p*3)+1] = (byte)0; + tex[(p*3)+2] = (byte)255; + } + } + } + gl.glTexImage2D + (GL_TEXTURE_2D, + 0, + 3, + width, + height, + 0, + GL_RGB, + GL_UNSIGNED_BYTE, + tex); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); + gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); + /* end texture object */ + + glj.gljCheckGL(); + } + + public void reshape(int width, int height) + { + gl.glViewport(0,0,width,height); + + gl.glMatrixMode(GL_PROJECTION); + gl.glLoadIdentity(); + gl.glFrustum(-2.0, 2.0, -2.0, 2.0, 6.0, 20.0); + gl.glMatrixMode(GL_MODELVIEW); + gl.glLoadIdentity(); + gl.glTranslatef(0.0f, 0.0f, -8.0f); + } + + public void display() + { + if (glj.gljMakeCurrent() == false) return; + + Angle += 0.2f; + + gl.glDepthFunc(GL_EQUAL); + gl.glClear(GL_COLOR_BUFFER_BIT); + + gl.glColor3f(1.0f, 1.0f, 1.0f); + + /* draw first polygon */ + gl.glPushMatrix(); + gl.glTranslatef(-1.0f, 0.0f, 0.0f); + gl.glRotatef(Angle, 0.0f, 0.0f, 1.0f); + gl.glBindTexture(GL_TEXTURE_2D, TexObj[0]); + gl.glBegin(GL_POLYGON); + gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex2f(-1.0f, -1.0f); + gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex2f( 1.0f, -1.0f); + gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex2f( 1.0f, 1.0f); + gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex2f(-1.0f, 1.0f); + gl.glEnd(); + gl.glPopMatrix(); + + /* draw second polygon */ + gl.glPushMatrix(); + gl.glTranslatef(1.0f, 0.0f, 0.0f); + gl.glRotatef(Angle-90.0f, 0.0f, 1.0f, 0.0f); + gl.glBindTexture(GL_TEXTURE_2D, TexObj[1]); + gl.glBegin(GL_POLYGON); + gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex2f(-1.0f, -1.0f); + gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex2f( 1.0f, -1.0f); + gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex2f( 1.0f, 1.0f); + gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex2f(-1.0f, 1.0f); + gl.glEnd(); + gl.glPopMatrix(); + + glj.gljSwap(); + glj.gljCheckGL(); + glj.gljFree(); + + //if (!isSuspended()) repaint(); // Animate at full speed. + } + } +} -- cgit v1.2.3