All pastes #188210 Raw Edit

Anonymous

public text v1 · immutable
·published 2006-10-01 21:48 UTC
rendered paste body

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys

quad = gluNewQuadric()
gluQuadricOrientation(quad, GLU_OUTSIDE)

#void initLights();
#void initMaterial();
#void redraw();
#void initGL();
#void resize(GLint w, GLint h);
#void keyfunc(GLubyte key, GLint x, GLint y);


def redraw():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    #gluCylinder(quad, 2.0,1.0,2.0,256,256)
    gluSphere(quad,2.0,256,256)
    glutSwapBuffers()

def resize(w, h):
    if (h == 0):
        h = 1

    #ensure that we are always square (even if whole window not used)
    if (w > h):
        w = h
    else:
        h = w

    # Reset the current viewport and perspective transformation
    glViewport(0, 0, w, h)

    # Tell GLUT to call redraw()
    glutPostRedisplay()

#/*
# * GLUT calls this function when any key is pressed while our window has
# * focus.  Here, we just quit if any appropriate key is pressed.  You can
# * do a lot more cool stuff with this here.
# */
def keyfunc( key,  x,  y):
    # escape or q or Q
    if (key == 27 | key == 'q' | key =='Q'):
        exit(0)

#/** Utility functions **/
#
#/**
# * Sets up an OpenGL light.  This only needs to be called once
# * and the light will be used during all renders.
# */
def initLights():
    amb = [ 1.0, 1.0, 1.0, 1.0 ]
    diff= [ 1.0, 1.0, 1.0, 1.0 ]
    spec= [ 1.0, 1.0, 1.0, 1.0 ]
    lightpos= [ 2.0, 5.0, 5.0, 1.0 ]
    shiny = 4.0

    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, amb)
    glLightfv(GL_LIGHT0, GL_AMBIENT, amb)
    glLightfv(GL_LIGHT0, GL_DIFFUSE, diff)
    glLightfv(GL_LIGHT0, GL_SPECULAR, spec)
    glLightfv(GL_LIGHT0, GL_POSITION, lightpos)
    #glLightf(GL_LIGHT0, GL_SHININESS, 4.0)
    glEnable(GL_LIGHT0)

    # Turn on lighting.  You can turn it off with a similar call to
    # glDisable().
    glEnable(GL_LIGHTING)


#
# Sets the OpenGL material state.  This is remembered so we only need to
# do this once.  If you want to use different materials, you'd need to do this
# before every different one you wanted to use.

def initMaterial():
    emit = [0.0, 0.0, 0.0, 1.0]
    amb = [0.0, 0.0, 0.0, 1.0]
    diff = [0.0, 0.0, 1.0, 1.0]
    spec = [1.0, 1.0, 1.0, 1.0]
    shiny = 20.0
    glMaterialfv(GL_FRONT, GL_AMBIENT, amb)
    glMaterialfv(GL_FRONT, GL_DIFFUSE, diff)
    glMaterialfv(GL_FRONT, GL_SPECULAR, spec)
    glMaterialfv(GL_FRONT, GL_EMISSION, emit)
    glMaterialfv(GL_FRONT, GL_SHININESS, shiny)

#
# Set up OpenGL state.  This does everything so when we draw we only need to
# actually draw the sphere, and OpenGL remembers all of our other settings.
#
def initGL():
    # Tell openGL to use gauraud shading:
    glShadeModel(GL_SMOOTH)
    
    # Enable back-face culling
    glEnable(GL_CULL_FACE)
    glCullFace(GL_BACK)

    # Enable depth-buffer test
    glEnable(GL_DEPTH_TEST)

    # Set up projection and modelview matrices ("camera" settings) 
    # Look up these functions to see what they're doing.
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glFrustum(-0.5, 0.5, -0.5, 0.5, 1, 10)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    gluLookAt(5, 5, 5, 0, 0, 0, 1, 0, 0)

    # set light parameters
    initLights()

    # set material parameters
    initMaterial()

    # initialize the "quadric" used by GLU to render high-level objects.

#/**
# * Main entrance point, obviously.
# * Sets up some stuff then passes control to glutMainLoop() which never
# * returns.
# */
def main():
    # OpenGL will take out any arguments intended for its use here.
    # Useful ones are -display and -gldebug.
    glutInit(sys.argv)

    # Get a double-buffered, depth-buffer-enabled window, with an
    # alpha channel.
    # These options aren't really necessary but are here for examples.
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)

    glutInitWindowSize(500, 500)
    glutInitWindowPosition(300, 100)

    glutCreateWindow("CS171 HW0")
    
    initGL()

    # set up GLUT callbacks.
    glutDisplayFunc(redraw)
    glutReshapeFunc(resize)
    glutKeyboardFunc(keyfunc)

    # From here on, GLUT has control,
    glutMainLoop()

    # so we should never get to this point.
    return 1



if __name__ == '__main__': main()