Results 1 to 2 of 2
  1. #1
    Kearnel is offline Member
    Join Date
    Jun 2010
    Posts
    6
    Rep Power
    0

    Exclamation JOGL Depth Buffer Not Working

    Hi, I've recently discovered a bug in some simple JOGL (Java Open Graphics Library) code that I was writing and can't figure out how to fix it. It seems that the depth buffer isn't working at all. In my code there is a stationary triangle and a moving square, when the square passes behind the triangle it looks like it's in front of the triangle instead of behind!

    Here is the output:
    Java Code:
    init:
    Deleting: /home/austin/NetBeansProjects/JOGLCoreClasses/build/built-jar.properties
    deps-jar:
    Updating property file: /home/austin/NetBeansProjects/JOGLCoreClasses/build/built-jar.properties
    Compiling 1 source file to /home/austin/NetBeansProjects/JOGLCoreClasses/build/classes
    compile:
    run:
    INIT GL IS: com.sun.opengl.impl.GLImpl
    do_wait: drmWaitVBlank returned -1, IRQs don't seem to be working correctly.
    Try adjusting the vblank_mode configuration parameter.
    BUILD SUCCESSFUL (total time: 18 seconds)
    Here is my code:
    Java Code:
    package Example;
    
    import com.sun.opengl.util.Animator;
    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import javax.media.opengl.GL;
    import javax.media.opengl.GLAutoDrawable;
    import javax.media.opengl.GLCanvas;
    import javax.media.opengl.GLEventListener;
    import javax.media.opengl.glu.GLU;
    
    
    
    /**
     * JOGLCoreClasses.java <BR>
     * author: Brian Paul (converted to Java by Ron Cemer and Sven Goethel) <P>
     *
     * This version is equal to Brian Paul's version 1.2 1999/10/21
     */
    public class JOGLExample implements GLEventListener {
    
        float x = 0;
    
        public static void main(String[] args) {
            Frame frame = new Frame("Simple JOGL Application");
            GLCanvas canvas = new GLCanvas();
    
            canvas.addGLEventListener(new JOGLCoreClasses());
            frame.add(canvas);
            frame.setSize(640, 480);
            final Animator animator = new Animator(canvas);
            frame.addWindowListener(new WindowAdapter() {
    
                @Override
                public void windowClosing(WindowEvent e) {
                    // Run this on another thread than the AWT event queue to
                    // make sure the call to Animator.stop() completes before
                    // exiting
                    new Thread(new Runnable() {
    
                        public void run() {
                            animator.stop();
                            System.exit(0);
                        }
                    }).start();
                }
            });
            // Center frame
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
            animator.start();
        }
    
        public void init(GLAutoDrawable drawable) {
            // Use debug pipeline
            // drawable.setGL(new DebugGL(drawable.getGL()));
    
            GL gl = drawable.getGL();
            System.err.println("INIT GL IS: " + gl.getClass().getName());
    
            // Enable VSync
            gl.setSwapInterval(1);
    
            // Setup the drawing area and shading mode
            gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            gl.glShadeModel(GL.GL_SMOOTH); // try setting this to GL_FLAT and see what happens.
        }
    
        public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
            GL gl = drawable.getGL();
            GLU glu = new GLU();
    
            if (height <= 0) { // avoid a divide by zero error!
            
                height = 1;
            }
            final float h = (float) width / (float) height;
            gl.glViewport(0, 0, width, height);
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glLoadIdentity();
            glu.gluPerspective(45.0f, h, 1.0, 20.0);
            gl.glMatrixMode(GL.GL_MODELVIEW);
            gl.glLoadIdentity();
        }
    
        public void display(GLAutoDrawable drawable) {
            x += 0.1;
            GL gl = drawable.getGL();
    
            // Clear the drawing area
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
            
            // Reset the current matrix to the "identity"
            gl.glLoadIdentity();
    
            // Move the "drawing cursor" around
            gl.glTranslatef(-1.5f, 0.0f, -6.0f);
    
            // Drawing Using Triangles
            gl.glBegin(GL.GL_TRIANGLES);
                gl.glColor3f(1.0f, 0.0f, 0.0f);    // Set the current drawing color to red
                gl.glVertex3f(0.0f, 1.0f, 0.0f);   // Top
                gl.glColor3f(0.0f, 1.0f, 0.0f);    // Set the current drawing color to green
                gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
                gl.glColor3f(0.0f, 0.0f, 1.0f);    // Set the current drawing color to blue
                gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
            // Finished Drawing The Triangle
            gl.glEnd();
    
            // Move the "drawing cursor" to another position
            gl.glLoadIdentity();
            gl.glTranslatef(0.0f, 0.0f, -6.0f);
            gl.glRotatef(x, 0, 1, 0);
            gl.glTranslatef(1.5f, 0.0f, 0.0f);
            // Draw A Quad
            gl.glBegin(GL.GL_QUADS);
                gl.glColor3f(0.5f, 0.5f, 1.0f);    // Set the current drawing color to light blue
                gl.glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left
                gl.glVertex3f(1.0f, 1.0f, 0.0f);   // Top Right
                gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
                gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
            // Done Drawing The Quad
            gl.glEnd();
    
            // Flush all drawing operations to the graphics card
            gl.glFlush();
        }
    
        public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {
        }
    }

  2. #2
    Kearnel is offline Member
    Join Date
    Jun 2010
    Posts
    6
    Rep Power
    0

Similar Threads

  1. Bit depth of a boolean
    By subith86 in forum New To Java
    Replies: 1
    Last Post: 01-23-2011, 08:39 AM
  2. Depth Perception with 2 Images
    By rp181 in forum Advanced Java
    Replies: 0
    Last Post: 02-25-2010, 12:39 AM
  3. the depth of SWT controls
    By Alarmmy in forum SWT / JFace
    Replies: 0
    Last Post: 07-13-2009, 09:51 AM
  4. Creating a tree of depth 5
    By roaan in forum New To Java
    Replies: 1
    Last Post: 07-13-2009, 09:26 AM
  5. maximum view depth?
    By Bit2_Gosu in forum New To Java
    Replies: 0
    Last Post: 02-16-2009, 02:32 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •