def __init__(self, outcome, gameWindow): self.outcome = outcome if outcome is "fact": self.filename = "fact.png" self.endpoint = "voteFact" elif outcome is "fiction": self.filename = "fiction.png" self.endpoint = "voteFiction" else: raise ValueError("Invalid stamp outcome: %s" % outcome) self.texture_data = glesutils.TextureData.from_file( "images/" + self.filename, True) self.texture = glesutils.Texture.from_data(self.texture_data) self.matrix = transforms.translation(0, 0, 0) #precompute rotoscale self.rotoscaleIn = transforms.stretching( 1, 1 / gameWindow.actual_w_to_h_ratio, 1) scaleX = self.texture_data.width / 2 / float(gameWindow.width) scaleY = self.texture_data.height / 2 / float(gameWindow.height) self.rotoscaleIn = transforms.compose( transforms.stretching(scaleX, scaleY, 1), self.rotoscaleIn) self.rotoscaleOut = transforms.stretching( 1, gameWindow.actual_w_to_h_ratio, 1) #intial values self.alpha = 1.0 self.rot = 0 self.zoom = 1.0
def on_frame(self, ftime): global start_time global data self.angle_y = self.angle_y + .5 self.program1.uniform.eye_matrix.value = transforms.compose( transforms.rotation_degrees(self.angle_z, "z"), transforms.rotation_degrees(self.angle_y, "y"), transforms.rotation_degrees(self.angle_x, "x"), transforms.translation(0.0, -0.9, 0.0)) frame_position = int((pygame.time.get_ticks() - start_time) * 44.1 * 4) # print("haow far through ", frame_position/len(data)) # print("time: ", pygame.time.get_ticks() - start_time) scale_factor = 0 if frame_position + 1000 < len(data): for i in range(1, 500): scale_factor1 = scale_factor + int.from_bytes( data[frame_position + 2 * i:frame_position + (2 * i) + 1], byteorder='little', signed=True)**2 scale_factor1 = scale_factor1 / 500 self.sound_matrix[self.counter % 20] = transforms.stretching( 1.0, scale_factor1, 1.0) self.program1.uniform.point_size.value = float(scale_factor1 / 4) self.counter = self.counter + 1 self.redraw()
def draw(self, ts=None, pos=None): ts = ts if ts else self.target_size pos = pos if pos else self.pos ### a scale value of 2 covers whole window sx = 2.0 sy = 2.0 tx = 0 ty = 0 if ts: sx *= float(ts[0])/float(self.booth.width) sy *= float(ts[1])/float(self.booth.height) if pos: tx = (2.0*float(pos[0])/float(self.booth.width))-1.0 ty = (2.0*float(pos[1])/float(self.booth.height))-1.0 Tm = transforms.translation((-0.5,-0.5,0)) ### correct inverted texture R = transforms.rotation_degrees(180, "z") ### shift texture to center of rotation before rotating S = transforms.stretching(sx, sy, 0) T = transforms.translation((tx,-ty,0)) self.booth.mvp_mat.value = T.dot(S).dot(R).dot(Tm) #print("Texture size: %dx%d" % (texture_data.width, texture_data.height)) self.booth.program.use() self.texture.bind(self.booth.program.uniform.texture.value) self.booth.drawing.draw()
def on_frame(self, ftime): global start_time global data self.angle_y = self.angle_y + .5 self.program1.uniform.eye_matrix.value = transforms.compose(transforms.rotation_degrees(self.angle_z, "z"), transforms.rotation_degrees(self.angle_y, "y"), transforms.rotation_degrees(self.angle_x, "x"), transforms.translation(0.0, -0.9, 0.0)) frame_position = int((pygame.time.get_ticks() - start_time) * 44.1 * 4) # print("haow far through ", frame_position/len(data)) # print("time: ", pygame.time.get_ticks() - start_time) scale_factor = 0 if frame_position + 1000 < len(data): for i in range(1,500): scale_factor1 = scale_factor + int.from_bytes(data[frame_position+2*i:frame_position+(2*i)+1], byteorder='little', signed=True)**2 scale_factor1 = scale_factor1 / 500 self.sound_matrix[self.counter%20] = transforms.stretching(1.0,scale_factor1,1.0) self.program1.uniform.point_size.value = float(scale_factor1/4) self.counter = self.counter+1 self.redraw()
def init(self): self.angle = 10 self.framerate = 20 self.vertex_shader = glesutils.VertexShader(vertex_glsl) self.fragment_shader = glesutils.FragmentShader(fragment_glsl) self.program1 = glesutils.Program(self.vertex_shader, self.fragment_shader) self.program1.use() glClearDepthf(1.0) glDepthFunc(GL_LESS) glEnable(GL_DEPTH_TEST) glFrontFace(GL_CW) glClearColor(0.5, 0.5, 0.5, 1) self.program1.uniform.light_dir.value = ((0, 1, -1)) self.verteces_buffer = array_spec.create_buffer(vertex_attrib=vertices) for face in faces: face["element_buffer"] = glesutils.ElementBuffer(face["vertex_index"]) self.outer_matrix = transforms.compose(transforms.rotation_degrees(20, "z"), transforms.rotation_degrees(20, "y"), transforms.rotation_degrees(20, "x"), transforms.scaling(1.2)) self.points_matrix = transforms.compose(transforms.stretching(0.1, 1, 1.5), transforms.translation(-0.5, -0.5, -0.5))
def draw(self, ts=None, pos=None): ts = ts if ts else self.target_size pos = pos if pos else self.pos ### a scale value of 2 covers whole window sx = 2.0 sy = 2.0 tx = 0 ty = 0 if ts: sx *= float(ts[0]) / float(self.booth.width) sy *= float(ts[1]) / float(self.booth.height) if pos: tx = (2.0 * float(pos[0]) / float(self.booth.width)) - 1.0 ty = (2.0 * float(pos[1]) / float(self.booth.height)) - 1.0 Tm = transforms.translation((-0.5, -0.5, 0)) ### correct inverted texture R = transforms.rotation_degrees(180, "z") ### shift texture to center of rotation before rotating S = transforms.stretching(sx, sy, 0) T = transforms.translation((tx, -ty, 0)) self.booth.mvp_mat.value = T.dot(S).dot(R).dot(Tm) #print("Texture size: %dx%d" % (texture_data.width, texture_data.height)) self.booth.program.use() self.texture.bind(self.booth.program.uniform.texture.value) self.booth.drawing.draw()
def draw(self): m = transforms.compose(transforms.rotation_degrees(self.angle, "y"), transforms.stretching(-1, 1, 1)) self.program.uniform.texcoord_mat.value = m[:3,:3] self.drawing.draw()