cpython/Demo/sgi/gl/backface.py

141 lines
2.2 KiB
Python
Executable File

#! /usr/bin/env python
# backface
#
# draw a cube that can run with backface() turned on or off.
# cube is moved when LEFTMOUSE is pressed and mouse itself is moved.
from gl import *
from DEVICE import *
from GL import *
CUBE_SIZE = 200.0
CUBE_OBJ = 1
def main () :
#
x = 0
y = 0
moveit = 0
#
initialize()
#
while (1) :
#
while (qtest()) :
dev, val = qread()
#
if dev == ESCKEY :
backface(0)
return
#
elif dev == REDRAW :
reshapeviewport()
drawcube(x,y)
#
elif dev == LEFTMOUSE :
#
# LEFTMOUSE down
moveit = val
#
elif dev == BKEY :
backface(1)
drawcube(x,y)
#
elif dev == FKEY :
backface(0)
drawcube(x,y)
#
if moveit :
x = getvaluator(MOUSEX)
y = getvaluator(MOUSEY)
drawcube(x,y)
def initialize () :
foreground ()
keepaspect (1, 1)
gid = winopen('backface')
winset(gid)
winconstraints()
#
doublebuffer()
gconfig()
shademodel(FLAT)
#
ortho(-1024.0, 1024.0, -1024.0, 1024.0, -1024.0, 1024.0)
#
qdevice(ESCKEY)
qdevice(REDRAW)
qdevice(LEFTMOUSE)
qdevice(BKEY)
qdevice(FKEY)
qenter(REDRAW,gid)
#
backface(1)
#
# define a cube
def cube () :
#
# front face
pushmatrix()
translate(0.0,0.0,CUBE_SIZE)
color(RED)
rectf(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE)
popmatrix()
#
# right face
pushmatrix()
translate(CUBE_SIZE, 0.0, 0.0)
rotate(900, 'y')
color(GREEN)
rectf(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE)
popmatrix()
#
# back face
pushmatrix()
translate(0.0, 0.0, -CUBE_SIZE)
rotate(1800, 'y')
color(BLUE)
rectf(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE)
popmatrix()
#
# left face
pushmatrix()
translate(-CUBE_SIZE, 0.0, 0.0)
rotate(-900, 'y')
color(CYAN)
rectf(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE)
popmatrix()
#
# top face
pushmatrix()
translate(0.0, CUBE_SIZE, 0.0)
rotate(-900, 'x')
color(MAGENTA)
rectf(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE)
popmatrix()
#
# bottom face
pushmatrix()
translate(0.0, -CUBE_SIZE, 0.0)
rotate(900, 'x')
color(YELLOW)
rectf(-CUBE_SIZE,-CUBE_SIZE,CUBE_SIZE,CUBE_SIZE)
popmatrix()
def drawcube(x,y) :
#
pushmatrix()
rotate(2*x, 'x')
rotate(2*y, 'y')
color(BLACK)
clear()
cube()
popmatrix()
swapbuffers()
main ()