Advertisement
Guest User

Untitled

a guest
Jan 26th, 2015
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. from kivy.app import App
  2. from kivy.clock import Clock
  3. from kivy.core.window import Window
  4. from kivy.uix.widget import Widget
  5. from kivy.resources import resource_find
  6. from kivy.graphics.transformation import Matrix
  7. from kivy.graphics.opengl import *
  8. from kivy.graphics import *
  9. from objloader import ObjFile
  10.  
  11.  
  12. class Renderer(Widget):
  13. def __init__(self, **kwargs):
  14. self.canvas = RenderContext(compute_normal_mat=True)
  15. self.canvas.shader.source = resource_find('simple.glsl')
  16. self.scene = ObjFile(resource_find("monkey.obj"))
  17. super(Renderer, self).__init__(**kwargs)
  18. with self.canvas:
  19. self.cb = Callback(self.setup_gl_context)
  20. PushMatrix()
  21. self.setup_scene()
  22. PopMatrix()
  23. self.cb = Callback(self.reset_gl_context)
  24. Clock.schedule_interval(self.update_glsl, 1 / 60.)
  25.  
  26. def setup_gl_context(self, *args):
  27. glEnable(GL_DEPTH_TEST)
  28.  
  29. def reset_gl_context(self, *args):
  30. glDisable(GL_DEPTH_TEST)
  31.  
  32. def gl_error(self, text = ''):
  33. err = glGetError()
  34. if not err:
  35. return
  36. while err:
  37. print '## GL ## = ' + text + 'OPENGL Error Code = ', err
  38. err = glGetError()
  39.  
  40. def update_glsl(self, *largs):
  41. asp = self.width / float(self.height)
  42. proj = Matrix().view_clip(-asp, asp, -1, 1, 1, 100, 1)
  43. self.gl_error('its all borked')
  44. self.canvas['projection_mat'] = proj
  45. self.canvas['diffuse_light'] = (1.0, 1.0, 0.8)
  46. self.canvas['ambient_light'] = (0.1, 0.1, 0.1)
  47. self.rot.angle += 1
  48.  
  49. def setup_scene(self):
  50. Color(1, 1, 1, 1)
  51. PushMatrix()
  52. Translate(0, 0, -3)
  53. self.rot = Rotate(1, 0, 1, 0)
  54. m = list(self.scene.objects.values())[0]
  55. UpdateNormalMatrix()
  56. self.mesh = Mesh(
  57. vertices=m.vertices,
  58. indices=m.indices,
  59. fmt=m.vertex_format,
  60. mode='triangles',
  61. )
  62. PopMatrix()
  63.  
  64.  
  65. class RendererApp(App):
  66. def build(self):
  67. return Renderer()
  68.  
  69. if __name__ == "__main__":
  70. RendererApp().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement