Mercurial > touhou
diff stageviewer.py @ 5:aa201d8cfc19
Fix camera handling, thanks, elghinn!
Camera handling is done using a few magical values,
which were obtained by dumping matrices using a modified wine installation,
and then doing some maths.
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Tue, 02 Aug 2011 00:43:12 +0200 |
parents | 787d2eb13c2d |
children | 9159fa222923 |
line wrap: on
line diff
--- a/stageviewer.py +++ b/stageviewer.py @@ -93,8 +93,8 @@ def build_objects_faces(stage, anim): width, height = 1., 1. if 2 in properties: width, height = struct.unpack('<ff', properties[2]) - width = width_override or width * 16. - height = height_override or height * 16. + width = width_override or width * 16. #TODO: something is wrong here + height = height_override or height * 16. #TODO: something is wrong here transform = Matrix.get_scaling_matrix(width, height, 1.) if 7 in properties: transform = Matrix.get_scaling_matrix(-1., 1., 1.).mult(transform) @@ -136,6 +136,10 @@ def main(path, stage_num): window = pygame.display.set_mode((384, 448), pygame.OPENGL | pygame.DOUBLEBUF) # Initialize OpenGL + glMatrixMode(GL_PROJECTION) + glLoadIdentity() + gluPerspective(30, float(window.get_width())/window.get_height(), 20, 2000) + glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST) glEnable(GL_DEPTH_TEST) glEnable(GL_BLEND) @@ -220,18 +224,17 @@ def main(path, stage_num): truc = (float(frame) - last_message[0]) / (next_message[0] - last_message[0]) - #TODO: find proper coordinates (get rid of arbitrary values) - x = x1 + (x2 - x1) * truc + 170. + x = x1 + (x2 - x1) * truc y = y1 + (y2 - y1) * truc - z = z1 + (z2 - z1) * truc - 720. + z = z1 + (z2 - z1) * truc - glMatrixMode(GL_PROJECTION) - glLoadIdentity() - gluPerspective(degrees(fov), float(window.get_width())/window.get_height(), 20, 2000) glMatrixMode(GL_MODELVIEW) glLoadIdentity() - gluLookAt(x, y, z, x, y - dy, 0., 0., -1., 0.) + gluLookAt(192., 224., - 835.979370 * fov, + 192., 224. - dy, 750 - 835.979370 * fov, 0., -1., 0.) #TODO: 750 might not be accurate + #print(glGetFloat(GL_MODELVIEW_MATRIX)) + glTranslatef(-x, -y, -z) glDrawArrays(GL_QUADS, 0, nb_vertices)