PDA

View Full Version : opengl models do not overlap correctly



foboi1122
02-21-2011, 09:48 AM
edit: I have added a few new lines of code to the beginning for depth buffering with no luck. See code..

edit 2: I am constructing the model builder on a wxglcanvas via wxwidgets. I have initialized WX_GL_DEPTH_SIZE of 16 and WX_GL_DOUBLEBUFFER on top of enabling depthbuffering and glClear(GL_DEPTH_BUFFER_BIT) with no luck. One thing that might be useful to note is that when I draw a cone, it seems to be drawing the cone as if I am looking at the inside of it rather than the outside portion, so it looks as if it's concaved in.

I have an odd problem where my openGL models do not overlap correctly. I am building a model builder so that the user can create and rotate a model on a canvas.

For example: If I have a circle within a box and I rotate the model around, I can still see the circle within the box as if the box is transparent. How I picture this is that if the circle is in the box, I should not be able to see it. Does anyone have any guesses to what causes this type of problem? I have not implemented any type of transparency, so I'm not really sure what is causing this. I am still very new to openGL so a lot of my efforts have just been trying lines of code I find on the forums and hoping it works.

This problem seems to only occur in Ubuntu and not under Win 7 when I test my program after adding two lines of code (shown below).

Here are some lines of code for drawing the models...


//Newly Added code
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_GEQUAL);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//End newly added code

glGetIntegerv(GL_MATRIX_MODE, &mm);

glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(identity);
GrGetInfo();

glViewport(0,0,gw->gc.width,gw->gc.height);
GrGetInfo();

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

// Set some predefined parameters

glOrtho ((GLdouble)tmpOtherAxis.minval, (GLdouble)tmpOtherAxis.maxval,
(GLdouble)tmpRangeAxis.minval, (GLdouble)tmpRangeAxis.maxval,
-range_dist, range_dist);
glMatrixMode(mm);

//ADDED THESE TWO LINES AND MODEL DISPLAYED
//CORRECTLY IN WIN7 BUT NOT UBUNTU
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glPushMatrix();
//Draw model here
glPopMatrix();



Thanks in advance!

carsten neumann
02-21-2011, 03:04 PM
glDepthFunc(GL_GEQUAL);
glClearDepth(1.0f);


with the above you should not see anything, except you draw something at the far clipping plane (Unless you have a specific reason to change it, leave the depth function at GL_LESS). To me this sounds a bit as if you are not actually having a depth buffer...



WX_GL_DEPTH_SIZE of 16


...perhaps because of this; probably the most common depth buffer size is 24 bits (and the remaining 8bit are optionally used for stencil). I don't know how wxWidgets picks the visual, but if it tries to find an exact match it may not find one having 16 bit depth and give you no depth buffer instead.
You can use glxinfo to see the supported visuals and their buffer sizes.