aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-09-22 15:56:40 +0200
committerAdrian Kummerlaender2019-09-22 15:56:40 +0200
commitab930a71ca076480f78a6a5f42ac2ff5cef24d08 (patch)
tree8d4d72c2a35f2edd838ceed43b39992d0747d256
parent86a98e34f93e20cf811a0a7965d211b5fe891018 (diff)
downloadsymlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.tar
symlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.tar.gz
symlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.tar.bz2
symlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.tar.lz
symlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.tar.xz
symlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.tar.zst
symlbm_playground-ab930a71ca076480f78a6a5f42ac2ff5cef24d08.zip
Enable mouse-based view rotation
-rw-r--r--channel_3d_volumetric_rendering_gl_interop.py18
-rw-r--r--utility/mouse.py21
2 files changed, 25 insertions, 14 deletions
diff --git a/channel_3d_volumetric_rendering_gl_interop.py b/channel_3d_volumetric_rendering_gl_interop.py
index 9e9555a..d3fe485 100644
--- a/channel_3d_volumetric_rendering_gl_interop.py
+++ b/channel_3d_volumetric_rendering_gl_interop.py
@@ -19,6 +19,7 @@ from geometry.box import Box
from geometry.cylinder import Cylinder
from utility.opengl import MomentsTexture
+from utility.mouse import MouseDragMonitor
lattice_x = 256
lattice_y = 64
@@ -286,19 +287,7 @@ def on_reshape(width, height):
glViewport(0,0,width,height)
projection = get_projection(width, height)
-def on_keyboard(key, *args):
- global rotation
-
- x = {
- b'w': -numpy.pi/20,
- b's': numpy.pi/20
- }.get(key, 0.0)
- z = {
- b'a': numpy.pi/20,
- b'd': -numpy.pi/20
- }.get(key, 0.0)
-
- rotation.update(x,z)
+mouse_monitor = MouseDragMonitor(GLUT_LEFT_BUTTON, lambda dx, dy: rotation.update(0.005*dy, 0.005*dx))
def on_timer(t):
glutTimerFunc(t, on_timer, t)
@@ -306,7 +295,8 @@ def on_timer(t):
glutDisplayFunc(on_display)
glutReshapeFunc(on_reshape)
-glutKeyboardFunc(on_keyboard)
+glutMouseFunc(mouse_monitor.on_mouse)
+glutMotionFunc(mouse_monitor.on_mouse_move)
glutTimerFunc(10, on_timer, 10)
glutMainLoop()
diff --git a/utility/mouse.py b/utility/mouse.py
new file mode 100644
index 0000000..c36d7e8
--- /dev/null
+++ b/utility/mouse.py
@@ -0,0 +1,21 @@
+from OpenGL.GLUT import *
+
+class MouseDragMonitor:
+ def __init__(self, button, callback):
+ self.button = button
+ self.callback = callback
+ self.active = False
+
+ def on_mouse(self, button, state, x, y):
+ if button == self.button:
+ self.active = (state == GLUT_DOWN)
+ self.last_x = x
+ self.last_y = y
+
+ def on_mouse_move(self, x, y):
+ if self.active:
+ delta_x = self.last_x - x
+ delta_y = y - self.last_y
+ self.last_x = x
+ self.last_y = y
+ self.callback(delta_x, delta_y)