PDA

View Full Version : cannot see every face of cube while rotating



mihaiASM
05-16-2010, 03:48 AM
Hi guys ! I'm relatively new to openGL and today i tried to create a cube that spins. However, when i rotate it, i cannot see all it's faces, but only a few. I figured out it's something wrong with my camera or perspective. Here is the code i used:



glClearColor(255,255,255,255);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(25,1,10,200);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(20,30,50,0,0,0,0,1,0);

glEnable(GL_DEPTH_TEST);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glViewport(0,0,dim,dim);
glDepthFunc(GL_LEQUAL);


what should i add to see every face of the cube ?
The cube is drawn "by hand", by calculating the new positions at every rotation:



struct Punct{
double x,y,z;
};

struct Cub{
Punct p[8];
};

Cub cube;
void rotatePoint(double &x,double &y,double angle){
double a,b;

a = x * cos(angle) - y * sin(angle);
b = y * cos(angle) + x * sin(angle);

x = a;
y = b;
}

void rotateCubeOX(double angle){
int i;
for( i = 0; i < 8; i++){
rotatePoint(cube.p[i].y,cube.p[i].z,angle);
}
}

void rotateCubeOY(double angle){
int i;
for( i = 0; i < 8; i++){
rotatePoint(cube.p[i].x,cube.p[i].z,angle);
}
}

void rotateCubeOZ(double angle){
int i;
for( i = 0; i < 8; i++){
rotatePoint(cube.p[i].x,cube.p[i].y,angle);
}
}

inline void Quad(GLdouble* v1,GLdouble* v2,GLdouble* v3,GLdouble* v4){
glBegin(GL_QUADS);
glVertex3dv(v1);
glVertex3dv(v2);
glVertex3dv(v3);
glVertex3dv(v4);
glEnd();
}

void deseneazaCub(){
double a[] = {cube.p[0].x,cube.p[0].y,cube.p[0].z};
double b[] = {cube.p[1].x,cube.p[1].y,cube.p[1].z};
double c[] = {cube.p[2].x,cube.p[2].y,cube.p[2].z};
double d[] = {cube.p[3].x,cube.p[3].y,cube.p[3].z};
double e[] = {cube.p[4].x,cube.p[4].y,cube.p[4].z};
double f[] = {cube.p[5].x,cube.p[5].y,cube.p[5].z};
double g[] = {cube.p[6].x,cube.p[6].y,cube.p[6].z};
double h[] = {cube.p[7].x,cube.p[7].y,cube.p[7].z};
glColor3f(1,0.1,0.1);
Quad(a,b,c,d);//fata
glColor3d(1,1,0);//galben
Quad(c, b, f, g); // dreapta
glColor3d(186,85,211);
Quad(h, g, f, e); // spate
glColor3d(205,127,50);
Quad(d, h, e, a); // stanga
glColor3d( 0, 1, 0 ); // verde
Quad(d, c, g, h); // deasupra
glColor3f(0.0f,0.0f,1.0f); // albastru
Quad(e, f, b, a); // dedesubt
}