create
This commit is contained in:
commit
541c8cb42e
13 changed files with 1410 additions and 0 deletions
109
mandelbulb/main.py
Normal file
109
mandelbulb/main.py
Normal file
|
@ -0,0 +1,109 @@
|
|||
import moderngl_window as mglw
|
||||
from tools import *
|
||||
from camera import Camera
|
||||
from time import sleep
|
||||
|
||||
print(__name__)
|
||||
|
||||
class App(mglw.WindowConfig):
|
||||
window_size = 1600, 900
|
||||
ro = 0, -0.5, -1.5
|
||||
ro = mult_ext_tuples(1, ro)
|
||||
rc = 0, -1, 2
|
||||
u_mouse = 0, 0
|
||||
forward = False
|
||||
backward = False
|
||||
resource_dir = 'resources/programs'
|
||||
cam = Camera(vec3(*rc), 0, 0)
|
||||
|
||||
mouse_pressed = False
|
||||
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.quad = mglw.geometry.quad_fs()
|
||||
self.program = self.load_program(vertex_shader='vertex.glsl', fragment_shader='fragment.glsl')
|
||||
# uniforms
|
||||
self.set_uniform('u_resolution', self.window_size)
|
||||
self.set_uniform('ro', self.ro)
|
||||
self.set_uniform('rc', self.rc)
|
||||
#self.set_uniform('u_mouse', self.u_mouse)
|
||||
self.set_uniform('cam', mat3ToTuple(np.eye(3)))
|
||||
|
||||
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 moove(self):
|
||||
x, y, z = tuple(self.cam.r1_temp)
|
||||
x = -x
|
||||
y = -y
|
||||
if self.forward:
|
||||
self.ro = add_tuples(self.ro, mult_ext_tuples(0.1, (x, y, z)))
|
||||
|
||||
if self.backward:
|
||||
self.ro = add_tuples(self.ro, mult_ext_tuples(-0.1, (x, y, z)))
|
||||
|
||||
|
||||
def cam_render(self):
|
||||
angles = self.cam.mouseToAngle(vec2(*self.u_mouse), vec2(*self.window_size))
|
||||
self.cam.camPhi, self.cam.camTheta = -angles[0]*4, angles[1]*2
|
||||
self.cam.update()
|
||||
|
||||
def render(self, time, frame_time):
|
||||
self.ctx.clear()
|
||||
#self.program['u_time'] = time
|
||||
self.quad.render(self.program)
|
||||
self.set_uniform('cam', mat3ToTuple(self.cam.camMat))
|
||||
|
||||
if self.mouse_pressed:
|
||||
self.cam_render()
|
||||
|
||||
if self.forward or self.backward:
|
||||
self.moove()
|
||||
|
||||
self.set_uniform('ro', self.ro)
|
||||
|
||||
|
||||
sleep(0)
|
||||
|
||||
|
||||
|
||||
def mouse_drag_event(self, x: int, y: int, dx: int, dy: int):
|
||||
self.u_mouse = x, y
|
||||
self.mouse_pressed = True
|
||||
|
||||
def mouse_release_event(self, x: int, y: int, button: int):
|
||||
self.mouse_pressed = False
|
||||
self.cam.camThetaBase += self.cam.camTheta
|
||||
self.cam.camPhiBase += self.cam.camPhi
|
||||
|
||||
|
||||
|
||||
def key_event(self, key, action, modifiers):
|
||||
|
||||
match key:
|
||||
case self.wnd.keys.UP:
|
||||
if action == self.wnd.keys.ACTION_PRESS:
|
||||
self.forward = True
|
||||
elif action == self.wnd.keys.ACTION_RELEASE:
|
||||
self.forward = False
|
||||
|
||||
case self.wnd.keys.DOWN:
|
||||
if action == self.wnd.keys.ACTION_PRESS:
|
||||
self.backward = True
|
||||
elif action == self.wnd.keys.ACTION_RELEASE:
|
||||
self.backward = False
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
mglw.run_window_config(App)
|
Loading…
Add table
Add a link
Reference in a new issue