// simpler.cpp : Defines the entry point for the console application. // #include #include //#include "gll.h" void displayTorus() { printf("In Display\n"); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glutSolidTorus(.2, .6, 32, 64); glutSwapBuffers(); } void display() { float n0[3] = {0, 0, 1}; float n1[3] = {0, .6, .8}; float n2[3] = {0, -.6, .8}; float v0[3] = {0, 0, 0}; float v1[3] = {0, .8, .2}; float v2[3] = {.8, .8, .2}; float v3[3] = {.8, 0, 0}; float v4[3] = {0.5, 0.5, .2}; printf("In Display\n"); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glNormal3fv(n0); glVertex3fv(v0); glNormal3fv(n1); glVertex3fv(v1); glNormal3fv(n2); glVertex3fv(v2); glNormal3fv(n2); glVertex3fv(v4); glNormal3fv(n0); glVertex3fv(v3); glEnd(); glutSwapBuffers(); } void keybd(unsigned char ch, int x, int y) { if(ch == 'q' || ch == 'Q' || ch == '\033') exit(0); else if(ch == 'w' || ch == 'W') glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); else if(ch == 's' || ch == 'S') glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glutPostRedisplay(); } void splkeybd(int ch, int x, int y) { float t = 0.1; printf("Ch is #%c#%d#\n", ch, (int)ch); if(ch == GLUT_KEY_UP) glTranslatef(0, t, 0); else if(ch == GLUT_KEY_DOWN) glTranslatef(0, -t, 0); else if(ch == GLUT_KEY_RIGHT) glTranslatef(t, 0, 0); else if(ch == GLUT_KEY_LEFT) glTranslatef(-t, 0, 0); glutPostRedisplay(); } void mouse(int button, int action, int x, int y) { float r, R = 5.0; r = (glutGetModifiers() == GLUT_ACTIVE_SHIFT)? -R:R; if(button == GLUT_LEFT_BUTTON && action == GLUT_UP) glRotatef(r, 0, 1, 0); else if(button == GLUT_RIGHT_BUTTON && action == GLUT_UP) glRotatef(r, 1, 0, 0); glutPostRedisplay(); } void initLight() { GLfloat light_specular[] = {0.8, 0.8, 0.8, 1.0}; GLfloat light_diffuse[] = {0.9, 0.5, 0.5, 1.0}; GLfloat light_ambient[] = {0.2, 0.2, 0.2, 1.0}; GLfloat light_position[] = {.578, .578, .578, 0.0}; // Directional glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); } void initMaterial() { GLfloat Ambient[] = { 0.2, 0.2, 0.2, 1.0 }; // (0.2,0.2,0.2,1) DEFAULT GLfloat Diffuse[] = { 0.8, 0.5, 0.6, 1.0 }; // (0.8,0.8,0.8,1) GLfloat Specular[] = { 0.4, 0.4, 0.4, 1 }; // (0,0,0,1) GLfloat SpecularExp[] = { 10 }; // (0) GLfloat Emission[] = { 0, 0, 4, 1 }; // (0,0,0,1) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, Ambient); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Specular); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, SpecularExp); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, Emission); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); } void initLighting() { initLight(); initMaterial(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("Simple Glut"); glutKeyboardFunc(keybd); glutSpecialFunc(splkeybd); glutMouseFunc(mouse); glutDisplayFunc(display); glMatrixMode(GL_PROJECTION); gluPerspective(20,1,.001,1000); glMatrixMode(GL_MODELVIEW); gluLookAt(0,0,5,0,0,0,0,1,0); glEnable(GL_DEPTH_TEST); initLighting(); glutMainLoop(); return 0; }