"""GLUT replacement for the original conechecker.py demonstration code
Note:
Has no navigation code ATM. Rather than creating two contexts,
it creates two viewports in the same context and renders into them
using the display functions from the other demo modules.
"""
# This is statement is required by the build system to query build info
if __name__ == '__build__':
raise Exception
__version__='$Revision: 1.1.1.1 $'[11:-2]
__date__ = '$Date: 2007/02/15 19:25:11 $'[6:-2]
import OpenGL
OpenGL.ERROR_ON_COPY = True
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import time, sys
import cone, checker
def display( ):
"""Callback function for displaying the scene
This defines a unit-square environment in which to draw,
i.e. width is one drawing unit, as is height
"""
glClearColor(0.5, 0.5, 0.5, 0)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
width,height = glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)
halfHeight = int(height/2.0)
glViewport(0,halfHeight,width, halfHeight+1)
# glClear doesn't restrict itself to the viewport,
# so we have to tell the child viewports not to use it...
checker.display( swap=0, clear=0)
glViewport(0,0,width, halfHeight)
cone.display( swap=1, clear=0)
glViewport(0,0,width, height)
def idle( ):
glutPostRedisplay()
starttime = time.time()
def rotation( period = 10):
"""Do rotation of the scene at given rate"""
angle = (((time.time()-starttime)%period)/period)* 360
glRotate( angle, 0,1,0)
return angle
def key_pressed(*args):
# If escape is pressed, kill everything.
if args[0] == '\033':
sys.exit()
if __name__ == "__main__":
print """You should see two OpenGL viewports, in the top, a sphere+checker-board
and in the bottom, a rotating cone."""
import sys
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
glutCreateWindow('Two-scene Demo (Cone Checker)')
glutDisplayFunc(display)
glutKeyboardFunc(key_pressed)
glutIdleFunc(display)
# note need to do this to properly render faceted geometry
glutMainLoop()
|