#include #include // Light GLfloat light_position[] = {10.0f, 10.0f, 10.0f, 1.0f}; GLfloat diffuse_light[] = {0.9f, 0.9, 0.9f, 0.0f}; GLubyte check_image[64][64][3]; GLubyte static_image[64][64][3]; GLuint check_id, static_id; void init_check_image() { int c; for (int i = 0; i < 64; i++) { for (int j = 0; j < 64; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; check_image[i][j][0] = (GLubyte) c; check_image[i][j][1] = (GLubyte) c; check_image[i][j][2] = (GLubyte) c; } } } void init_static_image() { int c; for (int i = 0; i < 64; i++) { for (int j = 0; j < 64; j++) { static_image[i][j][0] = rand()%255; static_image[i][j][1] = rand()%255; static_image[i][j][2] = rand()%255; } } } void display() { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslatef (0, 0, -10); glEnable(GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, static_id); glutSolidTeapot(2.0); glDisable(GL_TEXTURE_2D); glPopMatrix(); glFlush(); glutSwapBuffers(); glutPostRedisplay(); } void camera() { // Setup viewing glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective (60.0f, 1.5, 0.1, 1000); glMatrixMode (GL_MODELVIEW); } void doLights() { glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glLightfv (GL_LIGHT0, GL_DIFFUSE, diffuse_light); } void setupTextures() { init_static_image(); init_check_image(); glGenTextures (5, &check_id); // Start binding a texture, and store on graphics card glBindTexture (GL_TEXTURE_2D, check_id); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, check_image); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glGenTextures (5, &static_id); // Start binding a texture, and store on graphics card glBindTexture (GL_TEXTURE_2D, static_id); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 64, 64, 0, GL_RGB, GL_UNSIGNED_BYTE, static_image); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } int main (int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB); glutCreateWindow ("June 12th, 2006"); setupTextures(); glEnable (GL_DEPTH_TEST); camera(); doLights(); glutDisplayFunc (display); glutMainLoop(); }