diff options
Diffstat (limited to 'demos/RonsDemos/texobj.java')
-rw-r--r-- | demos/RonsDemos/texobj.java | 233 |
1 files changed, 233 insertions, 0 deletions
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.
+ }
+ }
+}
|