| #! /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 () |