include <gl/glut.h>GLfloat a=0.0; void init(){ glClearColor(0, 0, 0, 1); glEnable(GL_DEPTH_TEST); } void cube(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4) { gluLookAt(0, 5, 20, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // quan sat glPushMatrix(); //glMatrixMode(GL_MODELVIEW); //glLoadIdentity(); glRotatef(a,0,1,0); glBegin(GL_QUADS); //truoc glColor3f(1,0.3,0.3); glVertex3f(x1, y1, 0); glVertex3f(x2, y2, 0); glVertex3f(x3, y3, 0); glVertex3f(x4, y4, 0); //top glColor3f(1, 1, 1); glVertex3f( x1, y1, 0); glVertex3f( x2, y2, 0); glVertex3f( x2, y2, -3); glVertex3f( x1, y1, -3); //right glColor3f(0,1,0); glVertex3f(x1, y1, 0); glVertex3f(x1, y1, -3); glVertex3f(x4, y4, -3); glVertex3f(x4, y4, 0); //left glColor3f(0,0.8,1); glVertex3f(x2, y2, 0); glVertex3f(x2, y2, -3); glVertex3f(x3, y3, -3); glVertex3f(x3, y3, 0); //bottom glColor3f(1, 0, 0); glVertex3f(x3, y3, 0); glVertex3f(x3, y3, -3); glVertex3f(x4, y4, -3); glVertex3f(x4, y4, 0); //back glColor3f(1, 1, 0); glVertex3f(x1, y1, -3); glVertex3f(x2, y2, -3); glVertex3f(x3, y3, -3); glVertex3f(x4, y4, -3); glEnd(); glPopMatrix(); glFlush(); //a+=0.01; } void initRendering() { glEnable(GL_DEPTH_TEST); } void Ide() { glutPostRedisplay(); } void reshape(int w, int h) { if (h==0) { h=1; } float ratio=(float)w/(float)h; glViewport(0, 0, w, h); //bien doi khung hinh glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(66.0, ratio, 0.1, 100); //phep chieu phoi canh glMatrixMode(GL_MODELVIEW); } void draw() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(-1,0,0); //dau glPushMatrix(); cube(-4,6,4,6,4,0.5,-4,0.5); glPopMatrix(); //co glPushMatrix(); cube(-1,0.5,1,0.5,1,0,-1,0); glPopMatrix(); //than glPushMatrix(); cube(-2.5,0,2.5,0,2.5,-3,-2.5,-3); glPopMatrix(); //chan glPushMatrix(); cube(-2,-3,-1,-3,-1,-4,-2,-4); glPopMatrix(); glPushMatrix(); cube(2,-3,1,-3,1,-4,2,-4); glPopMatrix(); //banchan glPushMatrix(); cube(-3.5,-4,-0.5,-4,-0.5,-6,-3.5,-6); glPopMatrix(); glPushMatrix(); cube(3.5,-4,0.5,-4,0.5,-6,3.5,-6); glPopMatrix(); //tay glPushMatrix(); cube(-3,-0.5, -2.5,-0.5, -2.5,-1.5, -3,-1.5); glPopMatrix(); glPushMatrix(); cube(3,-0.5, 2.5,-0.5, 2.5,-1.5, 3,-1.5); glPopMatrix(); //canhtay glPushMatrix(); cube(3,-0.3,4.5,-0.3, 4.5,-3.5, 3,-3.5); glPopMatrix(); glPushMatrix(); cube(-3,-0.3, -4.5,-0.3, -4.5,-3.5, -3,-3.5); glPopMatrix(); glutSwapBuffers(); } //void anhsang() //{ // glClearColor(0, 0, 0, 0); // // glEnable(GL_LIGHTING); // glEnable(GL_LIGHT0); // glEnable(GL_DEPTH_TEST); // // GLfloat light_pos[]={1,0.5,1, 1.0}; // glLightfv(GL_LIGHT0, GL_POSITION, light_pos); // // GLfloat ambient[]={0,0,1, 1.0}; // glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); // // GLfloat diffuse[]={1,1, 1.0}; // glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); // // GLfloat specular[]={1 , 1 , 1}; // glLightfv(GL_LIGHT0, GL_SPECULAR, specular); //} int main() { glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE|GLUT_DEPTH ); glutInitWindowSize(555, 555); glutInitWindowPosition(333,111); glutCreateWindow(” ACB Ten”); initRendering(); init(); glutIdleFunc(Ide); /*anhsang();*/ glutReshapeFunc(reshape); glutDisplayFunc(draw); glutMainLoop(); } |