summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-01-26 21:13:41 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2021-01-26 21:14:16 +0000
commitce60561dfdb3d3cb583bcc38cbcb93b9cd1b13a6 (patch)
treec923445bf3f3452384af00d0b67df2ae2f100f07
parentBetter default camera pos (diff)
downloadilt-ce60561dfdb3d3cb583bcc38cbcb93b9cd1b13a6.tar.bz2
ilt-ce60561dfdb3d3cb583bcc38cbcb93b9cd1b13a6.tar.xz
ilt-ce60561dfdb3d3cb583bcc38cbcb93b9cd1b13a6.zip
Basic mouse navigation
-rw-r--r--application/main.cpp42
-rw-r--r--gfx/gl/camera.cpp6
-rw-r--r--gfx/gl/camera.h1
3 files changed, 49 insertions, 0 deletions
diff --git a/application/main.cpp b/application/main.cpp
index fe81b88..912fa4f 100644
--- a/application/main.cpp
+++ b/application/main.cpp
@@ -82,6 +82,7 @@ public:
auto t_start = std::chrono::high_resolution_clock::now();
const auto framelen = std::chrono::milliseconds {1000} / 120;
+ bool mrb {false}, ctrl {false};
while (isRunning) {
while (SDL_PollEvent(&e)) {
switch (e.type) {
@@ -108,9 +109,50 @@ public:
case SDLK_KP_9:
camera.RotateY(-0.04);
break;
+ case SDLK_LCTRL:
+ case SDLK_RCTRL:
+ ctrl = true;
+ break;
}
shader.setView(camera.GetViewProjection());
break;
+ case SDL_KEYUP:
+ switch (e.key.keysym.sym) {
+ case SDLK_LCTRL:
+ case SDLK_RCTRL:
+ ctrl = false;
+ break;
+ }
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ switch (e.button.button) {
+ case SDL_BUTTON_RIGHT:
+ SDL_SetRelativeMouseMode(SDL_TRUE);
+ mrb = true;
+ break;
+ }
+ break;
+ case SDL_MOUSEBUTTONUP:
+ switch (e.button.button) {
+ case SDL_BUTTON_RIGHT:
+ SDL_SetRelativeMouseMode(SDL_FALSE);
+ mrb = false;
+ break;
+ }
+ break;
+ case SDL_MOUSEMOTION:
+ if (mrb) {
+ if (ctrl) {
+ camera.RotateY(-0.01F * e.motion.xrel);
+ camera.Pitch(-0.01F * e.motion.yrel);
+ }
+ else {
+ camera.MoveRight(e.motion.xrel);
+ camera.SlideForward(e.motion.yrel);
+ }
+ shader.setView(camera.GetViewProjection());
+ }
+ break;
}
}
diff --git a/gfx/gl/camera.cpp b/gfx/gl/camera.cpp
index b4a76d0..2f48ca5 100644
--- a/gfx/gl/camera.cpp
+++ b/gfx/gl/camera.cpp
@@ -20,6 +20,12 @@ Camera::MoveForward(float amt)
}
void
+Camera::SlideForward(float amt)
+{
+ pos += forward * amt * glm::vec3 {1, 0, 1};
+}
+
+void
Camera::MoveRight(float amt)
{
pos += glm::cross(up, forward) * amt;
diff --git a/gfx/gl/camera.h b/gfx/gl/camera.h
index fa4296d..90d88a3 100644
--- a/gfx/gl/camera.h
+++ b/gfx/gl/camera.h
@@ -10,6 +10,7 @@ public:
[[nodiscard]] glm::mat4 GetViewProjection() const;
void MoveForward(float amt);
+ void SlideForward(float amt);
void MoveRight(float amt);
void Pitch(float angle);
void RotateY(float angle);