PDA

View Full Version : Hidden surface problem



dehabu
07-17-2010, 07:01 PM
Hello all,

I'm trying to draw a cube, but the result is wrong. Some faces that should be hidden aren't. The attached image shows that effect.

http://yfrog.com/6fmycubep

The used environment is Qt, but it's almost the same.



glEnable(GL_MULTISAMPLE);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glClearDepth( 1.0f );
....

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glViewport(0, 0, width(), height());

glMatrixMode(GL_PROJECTION);
glLoadMatrixd(projection);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0);
glMultMatrixd(modelview);

glBegin( GL_QUADS ); /* Draw A Quad */
glColor3f( 0.0f, 1.0f, 0.0f ); /* Set The Color To Green */
glVertex3f( 1.0f, 1.0f, -1.0f ); /* Top Right Of The Quad (Top) */
glVertex3f( -1.0f, 1.0f, -1.0f ); /* Top Left Of The Quad (Top) */
glVertex3f( -1.0f, 1.0f, 1.0f ); /* Bottom Left Of The Quad (Top) */
glVertex3f( 1.0f, 1.0f, 1.0f ); /* Bottom Right Of The Quad (Top) */

glColor3f( 1.0f, 0.5f, 0.0f ); /* Set The Color To Orange */
glVertex3f( 1.0f, -1.0f, 1.0f ); /* Top Right Of The Quad (Botm) */
glVertex3f( -1.0f, -1.0f, 1.0f ); /* Top Left Of The Quad (Botm) */
glVertex3f( -1.0f, -1.0f, -1.0f ); /* Bottom Left Of The Quad (Botm) */
glVertex3f( 1.0f, -1.0f, -1.0f ); /* Bottom Right Of The Quad (Botm) */

glColor3f( 1.0f, 0.0f, 0.0f ); /* Set The Color To Red */
glVertex3f( 1.0f, 1.0f, 1.0f ); /* Top Right Of The Quad (Front) */
glVertex3f( -1.0f, 1.0f, 1.0f ); /* Top Left Of The Quad (Front) */
glVertex3f( -1.0f, -1.0f, 1.0f ); /* Bottom Left Of The Quad (Front) */
glVertex3f( 1.0f, -1.0f, 1.0f ); /* Bottom Right Of The Quad (Front) */

glColor3f( 1.0f, 1.0f, 0.0f ); /* Set The Color To Yellow */
glVertex3f( 1.0f, -1.0f, -1.0f ); /* Bottom Left Of The Quad (Back) */
glVertex3f( -1.0f, -1.0f, -1.0f ); /* Bottom Right Of The Quad (Back) */
glVertex3f( -1.0f, 1.0f, -1.0f ); /* Top Right Of The Quad (Back) */
glVertex3f( 1.0f, 1.0f, -1.0f ); /* Top Left Of The Quad (Back) */

glColor3f( 0.0f, 0.0f, 1.0f ); /* Set The Color To Blue */
glVertex3f( -1.0f, 1.0f, 1.0f ); /* Top Right Of The Quad (Left) */
glVertex3f( -1.0f, 1.0f, -1.0f ); /* Top Left Of The Quad (Left) */
glVertex3f( -1.0f, -1.0f, -1.0f ); /* Bottom Left Of The Quad (Left) */
glVertex3f( -1.0f, -1.0f, 1.0f ); /* Bottom Right Of The Quad (Left) */

glColor3f( 1.0f, 0.0f, 1.0f ); /* Set The Color To Violet */
glVertex3f( 1.0f, 1.0f, -1.0f ); /* Top Right Of The Quad (Right) */
glVertex3f( 1.0f, 1.0f, 1.0f ); /* Top Left Of The Quad (Right) */
glVertex3f( 1.0f, -1.0f, 1.0f ); /* Bottom Left Of The Quad (Right) */
glVertex3f( 1.0f, -1.0f, -1.0f ); /* Bottom Right Of The Quad (Right) */
glEnd( );


glLineWidth(3.0);
glBegin(GL_LINES);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(-1.0, 0.0, 0.0);

glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, -1.0, 0.0);

glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 1.0);
glColor3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, -1.0);
glEnd();

swapBuffers();


Could somebody help me, please?

Thanks!

ZbuffeR
07-18-2010, 11:52 AM
It looks like depth buffer and/or depth test are missing.
As you seem to enable depth test, make sure you don't disable it elsewhere.
Then check if you request a depth buffer, not sure how it is done with Qt.