(py-indent-right, py-outdent-left): new commands, bound to C-c C-r and
[python/dscho.git] / Demo / sgi / gl / zrgb.py
blob6561e11b78f2781a3a637015f40e7069915f53a4
1 #! /usr/local/bin/python
3 # zrgb (Requires Z buffer.)
5 # This program demostrates zbuffering 3 intersecting RGB polygons while
6 # in doublebuffer mode where, movement of the mouse with the LEFTMOUSE
7 # button depressed will, rotate the 3 polygons. This is done by compound
8 # rotations allowing continuous screen-oriented rotations.
10 # Press the "Esc" key to exit.
12 from gl import *
13 from GL import *
14 from DEVICE import *
17 idmat=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
19 def main() :
21 # old and new mouse position
24 mode = 0
25 omx = 0
26 mx = 0
27 omy = 0
28 my = 0
30 objmat=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
32 initialize ()
34 draw_scene (objmat)
36 while (1) :
38 dev, val = qread()
40 if dev == ESCKEY :
41 if val :
42 break
43 # exit when key is going up, not down
44 # this avoids the scenario where a window
45 # underneath this program's window
46 # would otherwise "eat up" the up-
47 # event of the Esc key being released
48 return
50 elif dev == REDRAW :
51 reshapeviewport()
52 draw_scene(objmat)
54 elif dev == LEFTMOUSE:
55 omx = mx
56 omy = my
57 if val :
58 mode = 1
59 else :
60 mode = 0
61 elif dev == MOUSEX :
62 omx = mx
63 mx = val
64 #print omx, mx
65 objmat = update_scene(objmat,mx,my,omx,omy,mode)
67 elif dev == MOUSEY :
68 omy = my
69 my = val
70 #print omy, my
71 objmat = update_scene(objmat,mx,my,omx,omy,mode)
75 def initialize () :
77 foreground ()
78 keepaspect(5, 4)
79 w = winopen('Zbuffered RGB')
81 doublebuffer()
82 RGBmode()
83 gconfig()
84 zbuffer(1)
85 lsetdepth(0x0, 0x7FFFFF)
87 qdevice(ESCKEY)
88 qdevice(LEFTMOUSE)
89 qdevice(MOUSEX)
90 qdevice(MOUSEY)
92 def update_scene (mat, mx, my, omx, omy, mode) :
94 if mode == 1 :
95 mat = orient(mat, mx, my, omx, omy)
96 draw_scene(mat)
97 return mat
99 def orient (mat, mx, my, omx, omy) :
102 pushmatrix()
103 loadmatrix(idmat)
105 if mx - omx : rot (float (mx - omx), 'y')
106 if omy - my : rot (float (omy - my), 'x')
108 multmatrix(mat)
109 mat = getmatrix()
111 popmatrix()
113 return mat
115 def draw_scene (mat) :
116 RGBcolor(40, 100, 200)
117 clear()
118 zclear()
120 perspective(400, 1.25, 30.0, 60.0)
121 translate(0.0, 0.0, -40.0)
122 multmatrix(mat)
124 # skews original view to show all polygons
126 rotate(-580, 'y')
127 draw_polys()
129 swapbuffers()
131 polygon1 = [(-10.0,-10.0,0.0),(10.0,-10.0,0.0),(-10.0,10.0,0.0)]
133 polygon2 = [(0.0,-10.0,-10.0),(0.0,-10.0,10.0),(0.0,5.0,-10.0)]
135 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)]
137 def draw_polys():
138 bgnpolygon()
139 cpack(0x0)
140 v3f(polygon1[0])
141 cpack(0x007F7F7F)
142 v3f(polygon1[1])
143 cpack(0x00FFFFFF)
144 v3f(polygon1[2])
145 endpolygon()
147 bgnpolygon()
148 cpack(0x0000FFFF)
149 v3f(polygon2[0])
150 cpack(0x007FFF00)
151 v3f(polygon2[1])
152 cpack(0x00FF0000)
153 v3f(polygon2[2])
154 endpolygon()
156 bgnpolygon()
157 cpack(0x0000FFFF)
158 v3f(polygon3[0])
159 cpack(0x00FF00FF)
160 v3f(polygon3[1])
161 cpack(0x00FF0000)
162 v3f(polygon3[2])
163 cpack(0x00FF00FF)
164 v3f(polygon3[3])
165 endpolygon()
168 main ()