// This code was created by Jeff Molofee '99 // Io port by Steve Dekorte, 2001 Demo = Object clone do( true = 1 false = 0 kWindowWidth = 512 kWindowHeight = 256 lp = false // L Pressed? fp = false // F Pressed? bp = false // B pressed? xrot = 0 yrot = 0 xspeed = 1 yspeed = 1 z = -5 // Depth Into The Screen lightAmbient = List clone add(0.5, 0.5, 0.5, 1) lightDiffuse = List clone add(1, 1, 1, 1) lightPosition = List clone add(0, 0, 2, 1) filter = 0 texture = List clone add(1, 2, 3) ) Demo parent = OpenGL Demo main = method( glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH) glutInit glutEventTarget(self) glutInitWindowSize(kWindowWidth, kWindowHeight) glutInitWindowPosition(100, 100) glutCreateWindow ("Lesson 8") self initGL glutDisplayFunc glutReshapeFunc glutTimerFunc(10,0) glutKeyboardFunc glutMainLoop ) Demo initGL = method( self image = Image clone open(launchPath appendPath("glass.jpg")) image bindTexture glEnable(GL_TEXTURE_2D) // Enable Texture Mapping (NEW ) glClearColor(0, 0, 0, 0) // This Will Clear The Background Color To Black glClearDepth(1) // Enables Clearing Of The Depth Buffer glDepthFunc(GL_LESS) // The Type Of Depth Test To Do glEnable(GL_DEPTH_TEST) // Enables Depth Testing glShadeModel(GL_SMOOTH) // Enables Smooth Color Shading glMatrixMode(GL_PROJECTION) glLoadIdentity // Reset The Projection Matrix gluPerspective(45, kWindowWidth / kWindowHeight, 0.1, 100) // Calculate The Aspect Ratio Of The Window glMatrixMode(GL_MODELVIEW) glLightfv(GL_LIGHT1, GL_AMBIENT, lightAmbient) glLightfv(GL_LIGHT1, GL_DIFFUSE, lightDiffuse) glLightfv(GL_LIGHT1, GL_POSITION, lightPosition) glEnable(GL_LIGHT1) glBlendFunc(GL_SRC_ALPHA, GL_ONE) // Set The Blending Function For Translucency glColor4d(1, 1, 1, 0.5) bp = true glEnable(GL_BLEND) glDisable(GL_DEPTH_TEST) ) Demo timer = method(v, glutTimerFunc(5,0) xrot += xspeed yrot += yspeed self display ) Demo keyboard = method(key, x, y, //if(state == GLUT_KEYMOD_UP, return ) key = key asCharacter if(key == "l", if(lp == 0, glEnable(GL_LIGHTING), glDisable(GL_LIGHTING)) lp toggle ) if(key == "f", if(fp == 0, filter ++; if (filter > 2, filter = 0 )) fp toggle ) if(key == "b", if(bp == false, glEnable(GL_BLEND); glDisable(GL_DEPTH_TEST) , glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST) ) bp toggle ) if(key == "a", z += 0.3) if(key == "z", z -= 0.3) if(key == "q", xspeed -= 0.3) if(key == "w", xspeed += 0.3) if(key == "s", yspeed += 0.3) if(key == "x", yspeed -= 0.3) glutPostRedisplay ) Demo display = method( glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity glTranslated(0,0,z) glRotated(xrot,1,0,0) glRotated(yrot,0,1,0) image bindTexture //glBindTexture(GL_TEXTURE_2D, texture at(filter)) glBegin(GL_QUADS) // Front Face glNormal3d(0, 0, 1) glTexCoord2d(0, 0); glVertex3d(-1, -1, 1) glTexCoord2d(1, 0); glVertex3d(1, -1, 1) glTexCoord2d(1, 1); glVertex3d(1, 1, 1) glTexCoord2d(0, 1); glVertex3d(-1, 1, 1) // Back Face glNormal3d(0, 0,-1) glTexCoord2d(1, 0); glVertex3d(-1, -1, -1) glTexCoord2d(1, 1); glVertex3d(-1, 1, -1) glTexCoord2d(0, 1); glVertex3d(1, 1, -1) glTexCoord2d(0, 0); glVertex3d(1, -1, -1) // Top Face glNormal3d(0, 1, 0) glTexCoord2d(0, 1); glVertex3d(-1, 1, -1) glTexCoord2d(0, 0); glVertex3d(-1, 1, 1) glTexCoord2d(1, 0); glVertex3d(1, 1, 1) glTexCoord2d(1, 1); glVertex3d(1, 1, -1) // Bottom Face glNormal3d(0, -1, 0) glTexCoord2d(1, 1); glVertex3d(-1, -1, -1) glTexCoord2d(0, 1); glVertex3d(1, -1, -1) glTexCoord2d(0, 0); glVertex3d(1, -1, 1) glTexCoord2d(1, 0); glVertex3d(-1, -1, 1) // Right face glNormal3d(1, 0, 0) glTexCoord2d(1, 0); glVertex3d(1, -1, -1) glTexCoord2d(1, 1); glVertex3d(1, 1, -1) glTexCoord2d(0, 1); glVertex3d(1, 1, 1) glTexCoord2d(0, 0); glVertex3d(1, -1, 1) // Left Face glNormal3d(-1, 0, 0) glTexCoord2d(0, 0); glVertex3d(-1, -1, -1) glTexCoord2d(1, 0); glVertex3d(-1, -1, 1) glTexCoord2d(1, 1); glVertex3d(-1, 1, 1) glTexCoord2d(0, 1); glVertex3d(-1, 1, -1) glEnd glutSwapBuffers glFlush ) Demo reshape = method(w, h, glViewport (0, 0, w, h) glMatrixMode(GL_PROJECTION) glLoadIdentity gluPerspective(45, w/h, 0.1, 100) glMatrixMode(GL_MODELVIEW) glLoadIdentity ) Demo main