Add files via upload
This commit is contained in:
parent
f551f4713d
commit
b8b5c60dfc
7 changed files with 252 additions and 0 deletions
88
mandelbrot/main.py
Normal file
88
mandelbrot/main.py
Normal file
|
@ -0,0 +1,88 @@
|
|||
import moderngl_window as mglw
|
||||
|
||||
|
||||
|
||||
|
||||
class App(mglw.WindowConfig):
|
||||
center_pos = [0, 0]
|
||||
window_size = 1800, 1000
|
||||
zoom = 1
|
||||
nb_itter = 255
|
||||
resource_dir = 'resources'
|
||||
param1 = 2
|
||||
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.quad = mglw.geometry.quad_fs()
|
||||
self.zooming = 0
|
||||
|
||||
#self.quad = mglw.geometry.bbox()
|
||||
self.program = self.load_program(vertex_shader='programs/vertex.glsl',
|
||||
fragment_shader='programs/fragment.glsl')
|
||||
|
||||
self.set_uniform('param1', self.param1)
|
||||
self.set_uniform('resolution', self.window_size)
|
||||
self.set_uniform('center_pos', tuple(self.center_pos))
|
||||
self.set_uniform('zoom', self.zoom)
|
||||
self.set_uniform('nb_itter', self.nb_itter)
|
||||
|
||||
|
||||
def set_uniform(self, u_name, u_value):
|
||||
try:
|
||||
self.program[u_name] = u_value
|
||||
except KeyError:
|
||||
None
|
||||
print(f'{u_name} not used in shader')
|
||||
|
||||
|
||||
def render(self, time, frame_time):
|
||||
self.ctx.clear()
|
||||
self.set_uniform('time', time)
|
||||
self.quad.render(self.program)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def mouse_press_event(self, x, y, button):
|
||||
|
||||
print("Mouse button {} pressed at {}, {}".format(button, x, y))
|
||||
nx, ny = x/self.window_size[0], y/self.window_size[1]
|
||||
|
||||
dx, dy = (4*nx - 2)/self.zoom, (4*ny -2)/self.zoom
|
||||
self.center_pos[0] += dx
|
||||
self.center_pos[1] -= dy
|
||||
if button == 1:
|
||||
self.zoom *= 2
|
||||
else:
|
||||
self.zoom *= 0.5
|
||||
|
||||
self.set_uniform('center_pos', tuple(self.center_pos))
|
||||
self.set_uniform('zoom', self.zoom)
|
||||
|
||||
def key_event(self, key, action, modifiers):
|
||||
# Key presses
|
||||
if action == self.wnd.keys.ACTION_PRESS:
|
||||
|
||||
if key == self.wnd.keys.UP:
|
||||
self.nb_itter += 100
|
||||
if key == self.wnd.keys.DOWN:
|
||||
self.nb_itter -= 100
|
||||
|
||||
|
||||
if key == self.wnd.keys.RIGHT:
|
||||
self.param1 += 0.01
|
||||
|
||||
if key == self.wnd.keys.LEFT:
|
||||
self.param1 -= 0.01
|
||||
|
||||
|
||||
self.set_uniform('nb_itter', max(self.nb_itter, 10))
|
||||
self.set_uniform('param1', self.param1)
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
mglw.run_window_config(App)
|
Loading…
Add table
Add a link
Reference in a new issue