Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from kivy.app import App
- from kivy.clock import Clock
- from kivy.core.window import Window
- from kivy.uix.widget import Widget
- from kivy.resources import resource_find
- from kivy.graphics.transformation import Matrix
- from kivy.graphics.opengl import *
- from kivy.graphics import *
- from objloader import ObjFile
- class Renderer(Widget):
- def __init__(self, **kwargs):
- self.canvas = RenderContext(compute_normal_mat=True)
- self.canvas.shader.source = resource_find('simple.glsl')
- self.scene = ObjFile(resource_find("monkey.obj"))
- super(Renderer, self).__init__(**kwargs)
- with self.canvas:
- self.cb = Callback(self.setup_gl_context)
- PushMatrix()
- self.setup_scene()
- PopMatrix()
- self.cb = Callback(self.reset_gl_context)
- Clock.schedule_interval(self.update_glsl, 1 / 60.)
- def setup_gl_context(self, *args):
- glEnable(GL_DEPTH_TEST)
- def reset_gl_context(self, *args):
- glDisable(GL_DEPTH_TEST)
- def gl_error(self, text = ''):
- err = glGetError()
- if not err:
- return
- while err:
- print '## GL ## = ' + text + 'OPENGL Error Code = ', err
- err = glGetError()
- def update_glsl(self, *largs):
- asp = self.width / float(self.height)
- proj = Matrix().view_clip(-asp, asp, -1, 1, 1, 100, 1)
- self.gl_error('its all borked')
- self.canvas['projection_mat'] = proj
- self.canvas['diffuse_light'] = (1.0, 1.0, 0.8)
- self.canvas['ambient_light'] = (0.1, 0.1, 0.1)
- self.rot.angle += 1
- def setup_scene(self):
- Color(1, 1, 1, 1)
- PushMatrix()
- Translate(0, 0, -3)
- self.rot = Rotate(1, 0, 1, 0)
- m = list(self.scene.objects.values())[0]
- UpdateNormalMatrix()
- self.mesh = Mesh(
- vertices=m.vertices,
- indices=m.indices,
- fmt=m.vertex_format,
- mode='triangles',
- )
- PopMatrix()
- class RendererApp(App):
- def build(self):
- return Renderer()
- if __name__ == "__main__":
- RendererApp().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement