jaysocrates

06-24-2004, 09:33 PM

Sorry, this is probably a dumb question but I just started w/ openGL this week!

I'm trying to draw a cube and rotate it in various directions responding to keyboard input. The problem is that the surfaces don't seem to display correctly--eg, when I rotate, surfaces appear and disappear in ways I don't expect from a rotating cube. (But I tried using GL_LINES instead of GL_QUADS to draw an "empty" cube and things looked ok...)

I was thinking maybe the problem was the order I was drawing the squares--does this matter at all, or is it another problem? Here's my code for the drawing function:

void DrawCube(HDC hDC,float x,float y,float z,float len)

{

clear(); //clears buffer

glPushMatrix();

glRotatef(rotate[0].angle,1.0f,0,0); //x,y,z rotations

glRotatef(rotate[1].angle,0,1.0f,0);

glRotatef(rotate[2].angle,0,0,1.0f);

glBegin(GL_QUADS);

//front face:

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

glVertex3f(x, y, z);

glVertex3f(x+len, y, z);

glVertex3f(x+len, y-len, z);

glVertex3f(x, y-len, z);

//back face:

glColor3f(0.5f,0.5f,0.0f);

glVertex3f(x, y, z-1);

glVertex3f(x+len, y, z-1);

glVertex3f(x+len, y-len, z-1);

glVertex3f(x, y-len, z-1);

//left face:

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

glVertex3f(x,y,z-1);

glVertex3f(x,y-len,z-1);

glVertex3f(x,y-len,z);

glVertex3f(x,y,z);

//right face:

glColor3f(0.0f,0.5f,0.5f);

glVertex3f(x+len,y,z);

glVertex3f(x+len,y,z-1);

glVertex3f(x+len,y-len,z-1);

glVertex3f(x+len,y-len,z);

//top face:

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

glVertex3f(x,y,z);

glVertex3f(x,y,z-1);

glVertex3f(x+len,y,z-1);

glVertex3f(x+len,y,z);

//bottom face:

glColor3f(0.5f,0.0f,0.5f);

glVertex3f(x,y-len,z);

glVertex3f(x,y-len,z-1);

glVertex3f(x+len,y-len,z-1);

glVertex3f(x+len,y-len,z);

glEnd();

glPopMatrix();

SwapBuffers(hDC);

}

Thanks,

Jay

I'm trying to draw a cube and rotate it in various directions responding to keyboard input. The problem is that the surfaces don't seem to display correctly--eg, when I rotate, surfaces appear and disappear in ways I don't expect from a rotating cube. (But I tried using GL_LINES instead of GL_QUADS to draw an "empty" cube and things looked ok...)

I was thinking maybe the problem was the order I was drawing the squares--does this matter at all, or is it another problem? Here's my code for the drawing function:

void DrawCube(HDC hDC,float x,float y,float z,float len)

{

clear(); //clears buffer

glPushMatrix();

glRotatef(rotate[0].angle,1.0f,0,0); //x,y,z rotations

glRotatef(rotate[1].angle,0,1.0f,0);

glRotatef(rotate[2].angle,0,0,1.0f);

glBegin(GL_QUADS);

//front face:

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

glVertex3f(x, y, z);

glVertex3f(x+len, y, z);

glVertex3f(x+len, y-len, z);

glVertex3f(x, y-len, z);

//back face:

glColor3f(0.5f,0.5f,0.0f);

glVertex3f(x, y, z-1);

glVertex3f(x+len, y, z-1);

glVertex3f(x+len, y-len, z-1);

glVertex3f(x, y-len, z-1);

//left face:

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

glVertex3f(x,y,z-1);

glVertex3f(x,y-len,z-1);

glVertex3f(x,y-len,z);

glVertex3f(x,y,z);

//right face:

glColor3f(0.0f,0.5f,0.5f);

glVertex3f(x+len,y,z);

glVertex3f(x+len,y,z-1);

glVertex3f(x+len,y-len,z-1);

glVertex3f(x+len,y-len,z);

//top face:

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

glVertex3f(x,y,z);

glVertex3f(x,y,z-1);

glVertex3f(x+len,y,z-1);

glVertex3f(x+len,y,z);

//bottom face:

glColor3f(0.5f,0.0f,0.5f);

glVertex3f(x,y-len,z);

glVertex3f(x,y-len,z-1);

glVertex3f(x+len,y-len,z-1);

glVertex3f(x+len,y-len,z);

glEnd();

glPopMatrix();

SwapBuffers(hDC);

}

Thanks,

Jay