def handle_arcball(): global last_click_pos global model_mod global model global view_mod global view # LMB = rotate arcball if (pygame.mouse.get_pressed()[0]): if (last_click_pos[0] == (-1, -1)): last_click_pos[0] = pygame.mouse.get_pos() v_new = screen_to_arcball(pygame.mouse.get_pos()) v_old = screen_to_arcball(last_click_pos[0]) angle = math.acos(min(1.0, v_new.dot(v_old))) axis = (v_new.cross(v_old)).normalize() model_mod = Matrix44.rotation_about_axis(axis, angle) else: if (last_click_pos[0] != (-1, -1)): last_click_pos[0] = (-1, -1) model = model_mod * model model_mod = Matrix44.identity() # MMB = translate arcball if (pygame.mouse.get_pressed()[1]): if (last_click_pos[1] == (-1, -1)): last_click_pos[1] = pygame.mouse.get_pos() dx = (pygame.mouse.get_pos()[0] - last_click_pos[1][0]) / float(res[0]) dy = (pygame.mouse.get_pos()[1] - last_click_pos[1][1]) / float(res[1]) view_mod = Matrix44.translation(-dx, -dy, 0) else: if (last_click_pos[1] != (-1, -1)): last_click_pos[1] = (-1, -1) view = view_mod * view view_mod = Matrix44.identity() # RMB = scale arcball (based on RMB delta y) if (pygame.mouse.get_pressed()[2]): if (last_click_pos[2] == (-1, -1)): last_click_pos[2] = pygame.mouse.get_pos() dy = (pygame.mouse.get_pos()[1] - last_click_pos[2][1]) / float(res[1]) model_mod = Matrix44.scale(max(-dy + 1.0, 0.01)) else: if (last_click_pos[2] != (-1, -1)): last_click_pos[2] = (-1, -1) model = model_mod * model model_mod = Matrix44.identity()
void main() { float t = fract(time); vec4 c = vcolor; gl_FragColor = vec4(c.xyz, 1.0f); } """ # GLOBALS gVertices = data.getVertices() gColors = data.getColors() # MVP matrices model = Matrix44.identity() view = Matrix44.identity() proj = Matrix44.identity() view_mod = Matrix44.identity() model_mod = Matrix44.identity() # mouse vars last_click_pos = [(-1, -1), (-1, -1), (-1, -1)] # display vars res = (1024, 1024) # Read data into vertices # TODO: Streamline this