home *** CD-ROM | disk | FTP | other *** search
- #! /usr/local/bin/python
-
- # zrgb (Requires Z buffer.)
- #
- # This program demostrates zbuffering 3 intersecting RGB polygons while
- # in doublebuffer mode where, movement of the mouse with the LEFTMOUSE
- # button depressed will, rotate the 3 polygons. This is done by compound
- # rotations allowing continuous screen-oriented rotations.
- #
- # Press the "Esc" key to exit.
-
- from gl import *
- from GL import *
- from DEVICE import *
-
-
- idmat=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
-
- def main() :
- #
- # old and new mouse position
- #
- #
- mode = 0
- omx = 0
- mx = 0
- omy = 0
- my = 0
- #
- objmat=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
- #
- initialize ()
- #
- draw_scene (objmat)
- #
- while (1) :
- #
- dev, val = qread()
- #
- if dev == ESCKEY :
- if val :
- break
- # exit when key is going up, not down
- # this avoids the scenario where a window
- # underneath this program's window
- # would otherwise "eat up" the up-
- # event of the Esc key being released
- return
- #
- elif dev == REDRAW :
- reshapeviewport()
- draw_scene(objmat)
- #
- elif dev == LEFTMOUSE:
- omx = mx
- omy = my
- if val :
- mode = 1
- else :
- mode = 0
- elif dev == MOUSEX :
- omx = mx
- mx = val
- #print omx, mx
- objmat = update_scene(objmat,mx,my,omx,omy,mode)
- #
- elif dev == MOUSEY :
- omy = my
- my = val
- #print omy, my
- objmat = update_scene(objmat,mx,my,omx,omy,mode)
- #
-
-
- def initialize () :
- #
- foreground ()
- keepaspect(5, 4)
- w = winopen('Zbuffered RGB')
- #
- doublebuffer()
- RGBmode()
- gconfig()
- zbuffer(1)
- lsetdepth(0x0, 0x7FFFFF)
- #
- qdevice(ESCKEY)
- qdevice(LEFTMOUSE)
- qdevice(MOUSEX)
- qdevice(MOUSEY)
-
- def update_scene (mat, mx, my, omx, omy, mode) :
- #
- if mode == 1 :
- mat = orient(mat, mx, my, omx, omy)
- draw_scene(mat)
- return mat
-
- def orient (mat, mx, my, omx, omy) :
- #
- #
- pushmatrix()
- loadmatrix(idmat)
- #
- if mx - omx : rot (float (mx - omx), 'y')
- if omy - my : rot (float (omy - my), 'x')
- #
- multmatrix(mat)
- mat = getmatrix()
- #
- popmatrix()
- #
- return mat
-
- def draw_scene (mat) :
- RGBcolor(40, 100, 200)
- clear()
- zclear()
- #
- perspective(400, 1.25, 30.0, 60.0)
- translate(0.0, 0.0, -40.0)
- multmatrix(mat)
- #
- # skews original view to show all polygons
- #
- rotate(-580, 'y')
- draw_polys()
- #
- swapbuffers()
-
- polygon1 = [(-10.0,-10.0,0.0),(10.0,-10.0,0.0),(-10.0,10.0,0.0)]
-
- polygon2 = [(0.0,-10.0,-10.0),(0.0,-10.0,10.0),(0.0,5.0,-10.0)]
-
- polygon3 = [(-10.0,6.0,4.0),(-10.0,3.0,4.0),(4.0,-9.0,-10.0),(4.0,-6.0,-10.0)]
-
- def draw_polys():
- bgnpolygon()
- cpack(0x0)
- v3f(polygon1[0])
- cpack(0x007F7F7F)
- v3f(polygon1[1])
- cpack(0x00FFFFFF)
- v3f(polygon1[2])
- endpolygon()
- #
- bgnpolygon()
- cpack(0x0000FFFF)
- v3f(polygon2[0])
- cpack(0x007FFF00)
- v3f(polygon2[1])
- cpack(0x00FF0000)
- v3f(polygon2[2])
- endpolygon()
- #
- bgnpolygon()
- cpack(0x0000FFFF)
- v3f(polygon3[0])
- cpack(0x00FF00FF)
- v3f(polygon3[1])
- cpack(0x00FF0000)
- v3f(polygon3[2])
- cpack(0x00FF00FF)
- v3f(polygon3[3])
- endpolygon()
-
-
- main ()
-