annotate lightsim/openglsim.py @ 341:f866d4dec57b

openglsim now mixes images
author drewp@bigasterisk.com
date Tue, 29 May 2007 18:20:15 +0000
parents 45b12307c695
children 839545f174d3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 # see http://www.sgi.com/software/opengl/advanced97/notes/node57.html for accum notes
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
3 import sys, time
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
4 import numpy as num
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 from OpenGL.GL import *
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 from OpenGL.Tk import *
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
7 import Image
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
8
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
9 def drawWithAlpha(imgString, w, h, alpha):
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
10 """without opengl extensions"""
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
11 t = time.time()
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
12 ar = num.reshape(num.fromstring(imgString, dtype='uint8'),
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
13 (w * h, 4))
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
14 print " tonum", time.time() - t
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
15 ar[:,3] *= alpha
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
16
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
17 print " scl", time.time() - t
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
18 glDrawPixels(w, h,
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
19 GL_RGBA, GL_UNSIGNED_BYTE, ar.tostring())
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
20 print " draw", time.time() - t
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
21
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 class Surface:
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 def Display(self, event=None):
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
25 assert 'GL_ARB_imaging' in glGetString(GL_EXTENSIONS).split()
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
26
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 glClearColor(0.0, 0.0, 0.0, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 glClear( GL_COLOR_BUFFER_BIT |GL_ACCUM_BUFFER_BIT)
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
29 glEnable(GL_BLEND)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
30 #glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
31 glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 l=glGenLists(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 glNewList(l,GL_COMPILE)
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 glEndList()
45b12307c695 Initial revision
drewp
parents:
diff changeset
35
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 # glDrawBuffer(GL_BACK)
45b12307c695 Initial revision
drewp
parents:
diff changeset
37
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
38 for x, img in enumerate(self.image):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 mag = self.scales[x].get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 print "pic %i at %f" % (x,mag)
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
41 # glClear(GL_COLOR_BUFFER_BIT)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
42 #glBlendColor(1, 1, 1, mag) # needs ARB_imaging
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
43 drawWithAlpha(img, self.imageWidth, self.imageHeight, mag)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
44
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
45
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
46 ## if x==0:
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
47 ## glAccum(GL_LOAD,mag)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
48 ## else:
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
49 ## glAccum(GL_ACCUM,mag)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
50
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 # glAccum(GL_ADD,self.x)
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 self.x=(self.x+.1)%2.0
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
53 ## glAccum(GL_RETURN,1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
54
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 def SetupWindow(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 self.OglFrame = Frame()
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 self.OglFrame.pack(side = 'top',fill='both',expand=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 self.QuitButton = Button(self.OglFrame, {'text':'Quit'})
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 self.QuitButton.bind('<ButtonRelease-1>', sys.exit)
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 self.QuitButton.pack({'side':'top'})
45b12307c695 Initial revision
drewp
parents:
diff changeset
61
45b12307c695 Initial revision
drewp
parents:
diff changeset
62
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 def SetupOpenGL(self):
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
64 self.ogl = Opengl(master=self.OglFrame, width = 512, height = 270, double = 1, depth = 0)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 self.ogl.pack(side = 'top', expand = 1, fill = 'both')
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 self.ogl.set_centerpoint(0, 0, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 self.ogl.redraw = self.Display
45b12307c695 Initial revision
drewp
parents:
diff changeset
68
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 for x in range(0,2):
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 self.scales[x] = Scale(self.OglFrame,label="s%i"%x,from_=0,to=1,res=.05,orient='horiz',command=self.ogl.tkRedraw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 self.scales[x].pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
72
45b12307c695 Initial revision
drewp
parents:
diff changeset
73
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 self.x=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 self.scales=[None,None]
45b12307c695 Initial revision
drewp
parents:
diff changeset
77
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 self.SetupWindow()
45b12307c695 Initial revision
drewp
parents:
diff changeset
79
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 self.image=[]
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
81 for filename in ('skyline/bg.png', 'skyline/cyc-lo-red.png'):
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
82 im = Image.open(filename)
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
83 im.thumbnail((200, 200))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 self.imageWidth = im.size[0]
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 self.imageHeight = im.size[1]
341
f866d4dec57b openglsim now mixes images
drewp@bigasterisk.com
parents: 0
diff changeset
86 self.image.append(im.convert("RGBA").tostring())#"raw", "RGB", 0, -1))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 print self.imageWidth, self.imageHeight, self.imageWidth * self.imageHeight*4, len(self.image)
45b12307c695 Initial revision
drewp
parents:
diff changeset
88
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 self.SetupOpenGL()
45b12307c695 Initial revision
drewp
parents:
diff changeset
90
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 glDisable(GL_CULL_FACE)
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 # glEnable(GL_DEPTH_TEST)
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 # glEnable(GL_NORMALIZE)
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 glShadeModel(GL_FLAT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
95
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 self.ogl.tkRedraw()
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 self.ogl.mainloop()
45b12307c695 Initial revision
drewp
parents:
diff changeset
98
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 if __name__ == '__main__':
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 Surface()
45b12307c695 Initial revision
drewp
parents:
diff changeset
101
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 demo = Surface