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 SlamDrag   Members   -  Reputation: 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.


Sponsor:

#2 Waterlimon   Crossbones+   -  Reputation: 2565

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 SlamDrag   Members   -  Reputation: 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 Waterlimon   Crossbones+   -  Reputation: 2565

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 SlamDrag   Members   -  Reputation: 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 Waterlimon   Crossbones+   -  Reputation: 2565

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 Kaptein   Prime Members   -  Reputation: 2151

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 Vortez   Crossbones+   -  Reputation: 2698

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 SlamDrag   Members   -  Reputation: 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.



PARTNERS