Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interesting OpenGL Graphical glitch


Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
8 replies to this topic

#1   Members   

111
Like
0Likes
Like

Posted 30 March 2013 - 04:42 PM

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.


Edited by SlamDrag, 30 March 2013 - 04:50 PM.


#2   Members   

4373
Like
1Likes
Like

Posted 30 March 2013 - 04:54 PM

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


#3   Members   

111
Like
1Likes
Like

Posted 30 March 2013 - 04:58 PM

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


Edited by SlamDrag, 30 March 2013 - 05:03 PM.


#4   Members   

4373
Like
1Likes
Like

Posted 30 March 2013 - 05:38 PM

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

o3o


#5   Members   

111
Like
0Likes
Like

Posted 30 March 2013 - 05:40 PM

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.



#6   Members   

4373
Like
1Likes
Like

Posted 31 March 2013 - 04:25 AM

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


#7   Prime Members   

2216
Like
0Likes
Like

Posted 31 March 2013 - 06:46 AM

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);

#8   Members   

2705
Like
1Likes
Like

Posted 31 March 2013 - 12:55 PM

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);


Edited by jbadams, 04 April 2013 - 05:42 AM.
Restored post contents from history.


#9   Members   

111
Like
0Likes
Like

Posted 31 March 2013 - 05:47 PM

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.


Edited by SlamDrag, 31 March 2013 - 05:47 PM.





Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.