#include /*=========================================================================*/ typedef struct { float x; float y; float z; float r; float g; float b; } point; point p[8]={ {-0.5,-0.5, 0.5,0.0,0.0,0.0}, {-0.5, 0.5, 0.5,0.0,0.0,0.0}, { 0.5, 0.5, 0.5,0.0,0.0,0.0}, { 0.5,-0.5, 0.5,0.0,0.0,0.0}, {-0.5,-0.5,-0.5,0.0,0.0,0.0}, {-0.5, 0.5,-0.5,0.0,0.0,0.0}, { 0.5, 0.5,-0.5,0.0,0.0,0.0}, { 0.5,-0.5,-0.5,0.0,0.0,0.0}}; int f[6][4]={ {0,1,2,3}, {3,2,6,7}, {4,5,6,7}, {0,1,5,4}, {1,5,6,2}, {0,4,7,3}}; char presse; int anglex,angley,x,y,xold,yold; int width=500, height=500, deep=400; /*=========================================================================*/ void display(); void mouse(int bouton,int etat,int x,int y); void mousemotion(int x,int y); /*=========================================================================*/ int main(int argc,char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(200,200); glutInitWindowSize(width,height); glutCreateWindow("cube"); glOrtho(-(width/2), (width/2), -(height/2), (height/2), -deep, deep); glClearColor(0.0,0.0,0.0,0.0); glColor3f(1.0,1.0,1.0); glPointSize(2.0); GLfloat positionL0[] = { 100, -100, 100, 0.0 }; GLfloat positionL1[] = { -100, 0, -100, 0.0 }; GLfloat positionL2[] = { 100, 0, -100, 0.0 }; GLfloat positionL3[] = { -100, 100, 100, 0.0 }; GLfloat positionL4[] = { -100, 100, -100, 0.0 }; GLfloat positionL5[] = { 100, 100, -100, 0.0 }; glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); glLightfv(GL_LIGHT0, GL_POSITION, positionL0); glLightfv(GL_LIGHT0, GL_POSITION, positionL1); glLightfv(GL_LIGHT0, GL_POSITION, positionL2); glLightfv(GL_LIGHT0, GL_POSITION, positionL3); glLightfv(GL_LIGHT0, GL_POSITION, positionL4); glLightfv(GL_LIGHT0, GL_POSITION, positionL5); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(mousemotion); glutMainLoop(); return 0; } /*=========================================================================*/ void display() { int i,j; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); /*--rotation of the mouse-*/ /*------------------------*/ glRotatef(-angley,1.0,0.0,0.0); glRotatef(-anglex,0.0,1.0,0.0); /*--drawing the cube--*/ /*--------------------*/ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); GLfloat colorvec[] = { 1.0, 1.0, 1.0, 1.0 }; glMaterialfv(GL_FRONT, GL_DIFFUSE, colorvec); for (i=0;i<6;i++) { glBegin(GL_POLYGON); for (j=0;j<4;j++) { glColor3f(p[f[i][j]].r,p[f[i][j]].g,p[f[i][j]].b); glVertex3f(p[f[i][j]].x,p[f[i][j]].y,p[f[i][j]].z); } glEnd(); } /*--finish with opengl stuff--*/ /*----------------------------*/ glFlush(); glutSwapBuffers(); } /*=========================================================================*/ void mouse(int button, int state,int x,int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { presse = 1; xold = x; yold=y; } if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) presse=0; } /*=========================================================================*/ void mousemotion(int x,int y) { if (presse) { anglex=anglex+(x-xold); angley=angley+(y-yold); glutPostRedisplay(); } xold=x; yold=y; }