diff --git a/src/main.c b/src/main.c index 1157beb..eba6cb2 100644 --- a/src/main.c +++ b/src/main.c @@ -45,6 +45,7 @@ int framesSinceUpdate = 0; GLfloat step = 0.0f; const GLfloat pi = 3.14159f; +vec3 origin = {0.0f, 0.0f, 0.0f}; vec3 cameraPosition = {0.0f, 2.0f, 1.0f}; vec3 objectPosition = {0.0f, 0.0f, 0.0f}; @@ -102,10 +103,26 @@ void handleInputs(double deltaTime) { } if (!cameraTraveling) { if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) { - cameraPosition.z += deltaTime * 10; + vec3 delta; + + vec3Subtract(&delta, &origin, &cameraPosition); + vec3Normalise(&delta, &delta); + vec3Multiply(&delta, &delta, -10); + vec3Multiply(&delta, &delta, deltaTime); + + vec3Add(&cameraPosition, &cameraPosition, &delta); } if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) { - cameraPosition.z -= deltaTime * 10; + vec3 delta; + vec3Subtract(&delta, &origin, &cameraPosition); + if (vec3Length(&delta) > 0.1) { + vec3Normalise(&delta, &delta); + vec3Multiply(&delta, &delta, 10); + vec3Multiply(&delta, &delta, deltaTime); + + vec3Add(&cameraPosition, &cameraPosition, &delta); + } + } if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) { cameraPosition.x += deltaTime * 10; @@ -342,7 +359,6 @@ void draw(void) { GLfloat stepi = step * pi * 2; // ------------- VIEWING TRANSFORMATION ------------------- - vec3 origin = {0.0f, 0.0f, 0.0f}; vec3 up = {0.0f, 1.0f, 0.0f}; lookAt(&viewingTransformation, &cameraPosition, &origin, &up);