Results 1 to 2 of 2
Thread: JOGL Depth Buffer Not Working
- 02-13-2011, 01:46 AM #1
Member
- Join Date
- Jun 2010
- Posts
- 6
- Rep Power
- 0
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:
Here is my code: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)
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) { } }
- 02-13-2011, 09:20 PM #2
Member
- Join Date
- Jun 2010
- Posts
- 6
- Rep Power
- 0
Similar Threads
-
Bit depth of a boolean
By subith86 in forum New To JavaReplies: 1Last Post: 01-23-2011, 08:39 AM -
Depth Perception with 2 Images
By rp181 in forum Advanced JavaReplies: 0Last Post: 02-25-2010, 12:39 AM -
the depth of SWT controls
By Alarmmy in forum SWT / JFaceReplies: 0Last Post: 07-13-2009, 09:51 AM -
Creating a tree of depth 5
By roaan in forum New To JavaReplies: 1Last Post: 07-13-2009, 09:26 AM -
maximum view depth?
By Bit2_Gosu in forum New To JavaReplies: 0Last Post: 02-16-2009, 02:32 PM


LinkBack URL
About LinkBacks

Bookmarks