Interesting OpenGL Graphical glitch

Started by
7 comments, last by SlamDrag 11 years ago

I've been developing a little hobby program for the past few days and I've come across an interesting glitch that I haven't been able to solve. Basically when I started adding 3D cubes to the program they wouldn't render correctly. The top of the cube seemed to fall into the the cube. A screenshot of what is happening: http://i.imgur.com/aOFil5D.png My rendering code (note: I am writing the program in Java)


public static void drawCube(float x, float y, float z, Color col, float size)
{
GL11.glTranslatef(x, y, z);
GL11.glBegin(GL11.GL_QUADS);
//Top Face
GL11.glColor3f(col.r+0.05f,col.g+0.05f,col.b+0.05f); //Set face color
GL11.glVertex3f( size, size,-size); //Top right corner
GL11.glVertex3f( -size,size,-size); //Top left corner
GL11.glVertex3f( -size, size,size); //Bottom left corner
GL11.glVertex3f( size, size, size); //Bottom right corner
//Bottom face
GL11.glColor3f(col.r-0.1f,col.g-0.1f,col.b-0.1f); //Set cube color
GL11.glVertex3f( size, -size,size); //Top right corner
GL11.glVertex3f( -size,-size,size); //Top left corner
GL11.glVertex3f(-size,-size,-size); //Bottom left corner
GL11.glVertex3f( size,-size,-size); //Bottom right corner
//Front face
GL11.glColor3f(col.r-0.07f,col.g-0.07f,col.b-0.07f); //Set cube color
GL11.glVertex3f( size, size, size); // Top right corner
GL11.glVertex3f( -size, size,size); // Top left corner
GL11.glVertex3f( -size,-size,size); // Bottom left corner
GL11.glVertex3f( size, -size,size); // Bottom right corner
//Back face
GL11.glColor3f(col.r+0.02f,col.g+0.02f,col.b+0.02f); //Set cube color
GL11.glVertex3f( size,-size,-size); // Top right corner
GL11.glVertex3f(-size,-size,-size); // Top left corner
GL11.glVertex3f(-size, size,-size); // Bottom left corner
GL11.glVertex3f( size, size,-size); // Bottom right corner
//Left face
GL11.glColor3f(col.r,col.g,col.b); //Set cube color
GL11.glVertex3f(-size, size, size); // Top right corner
GL11.glVertex3f(-size, size,-size); // Top left corner
GL11.glVertex3f(-size,-size,-size); // Bottom left corner
GL11.glVertex3f(-size,-size, size); // Bottom right corner
//Right face
GL11.glColor3f(col.r-0.05f,col.g-0.05f,col.b-0.05f); //Set cube color
GL11.glVertex3f( size, size,-size); // Top right corner
GL11.glVertex3f( size, size, size); // Top left corner
GL11.glVertex3f( size,-size, size); // Bottom left corner
GL11.glVertex3f( size,-size,-size); // Bottom right corner*/
    GL11.glEnd();
    GL11.glLoadIdentity();
}

I honestly have no idea why this is caused. I have used this code before for rendering cubes and it worked fine.

Admittedly I am quite a noob using OpenGL, and don't fully understand the math behind it so I probably am missing something very obvious.

Additional Information:

I am using LWJGL to interface OpenGL and Java. As well as the Netbeans IDE (that shouldn't make a difference but I thought I would make a note of it anyways)

EDIT: Fudge, the formatting got messed up.

Advertisement

You have the triangle vertices in the wrong order.

Eg. If you have them clockwise, make them counterclockwise instead.

You may also change the face which opengl doesnt render for a quick fix. (glCullface i believe)

o3o

Alright I tried making the vertices be drawn clockwise but that hasn't changed anything, the glitch still happens.

Maybe its the depth comparison mode... (lets say GL_GEQUAL to GL_LEQUAL)

o3o

Maybe its the depth comparison mode... (lets say GL_GEQUAL to GL_LEQUAL)

I don't know what that is, so I haven't been messing around with that.

void glDepthFunc(GLenum func);

GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, and GL_ALWAYS

Try calling

glDepthFunc(GL_LESS)...

If that doesnt work, try looking at the cube from another direction and see if its still the same way. If it looks ok from another direction, youre probably not doing any depth testing at all.

o3o

i believe depth testing has to be enabled, both during initialization (8, 16, 24 or 32 bits for depth channel)
and while drawing: glEnable(GL_DEPTH_TEST);

Im pretty sure you are drawing your triangles in the reverse order, since only back facing one are visible, dosen't seem to be a depth problem.

Try this and it should work

glDisable(GL_CULL_FACE);

i believe depth testing has to be enabled, both during initialization (8, 16, 24 or 32 bits for depth channel)
and while drawing: glEnable(GL_DEPTH_TEST);

Derp. It ended up I forgot to enable depth testing in the first place. Lawl.

Thank you all for putting up with my incompetence.

This topic is closed to new replies.

Advertisement