diff --git a/main.c b/main.c index 2be426d..44104eb 100644 --- a/main.c +++ b/main.c @@ -8,15 +8,17 @@ #include "./Libraries/stb/stb_image.h" #include "headers/shader.h" #define FULLSCREEN 0 +#define EXPERIMENTAL_FEATURES 1 /* ## DEBUG MODE ## * 0 for all * 1 for nothing * 2 for FPS * 3 for cursor position + * 5 for scroll level and precision * * For instance if you want fps and position set the value to 2*3=6 */ -#define DEBUG_MODE 3 +#define DEBUG_MODE 5 GLuint screenWidth = 720, screenHeight = 480; const GLFWvidmode* mode; @@ -29,11 +31,12 @@ void setupVAO(); unsigned int VAO; float currentTime, deltaTime, lastFrame,startTime; -float mousePosX,mousePosY,camPosX,camPosY,camPosZ,camDirX,camDirY,camDirZ; +float mousePosX,mousePosY,camPosX,camPosY,camPosZ; +float fovValue=1.0; //283=3.14/2 * 180 const int maxYmouse = 283; // more precision means less speed -const int camPrecision = 2; +float camPrecision = 2.; static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) { @@ -59,6 +62,27 @@ static void key_callback(GLFWwindow* window, int key, int scancode, int action, glfwSetWindowShouldClose(window, GLFW_TRUE); } +void scroll_callback(GLFWwindow* window, double xoffset, double yoffset) +{ + int stateControl = glfwGetKey(window, GLFW_KEY_LEFT_CONTROL); + + // we only use yoffset as it is present on normal mice + if (DEBUG_MODE % 5 == 0) + printf("scroll value : %f | precision : %f | ",yoffset, camPrecision); + printf((stateControl == GLFW_PRESS) ? "ctrl -> speed" : "Zooming"); + printf("\n"); + if (stateControl == GLFW_PRESS) { + camPrecision += yoffset/2; + if (camPrecision <= 1) + camPrecision=1; + } + else { + fovValue += yoffset/5; + if (fovValue <= 0.2 && EXPERIMENTAL_FEATURES == 0) + fovValue=0.2; + } + +} static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos) { @@ -136,6 +160,7 @@ int main (){ glfwSetKeyCallback(window, key_callback); glfwSetCursorPosCallback(window, cursor_position_callback); glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); + glfwSetScrollCallback(window, scroll_callback); GLFWimage images[1]; images[0].pixels = stbi_load("./assets/icon.png", &images[0].width, &images[0].height, 0, 4); //rgba channels @@ -177,8 +202,7 @@ int main (){ glUniform1f(glGetUniformLocation(quad_shader, "iTime"), currentTime-startTime); glUniform2f(glGetUniformLocation(quad_shader, "iMousePos"), mousePosX,mousePosY); glUniform3f(glGetUniformLocation(quad_shader, "iCamPos"), camPosX,camPosY,camPosZ); - glUniform3f(glGetUniformLocation(quad_shader, "iCamDir"), camDirX,camDirY,camDirZ); - + glUniform1f(glGetUniformLocation(quad_shader, "iFovValue"), fovValue); // glBindVertexArray(0); // no need to unbind it every time } diff --git a/shaders/generic.vs b/shaders/generic.vs index 29d8fd5..7c166c3 100644 --- a/shaders/generic.vs +++ b/shaders/generic.vs @@ -7,12 +7,12 @@ out vec2 FragCoord; out float Time; out vec2 MousePos; out vec3 CamPos; -out vec3 CamDir; +out float fovValue; uniform float iTime; uniform vec2 iMousePos; uniform vec3 iCamPos; -uniform vec3 iCamDir; +uniform float iFovValue; void main() @@ -22,5 +22,5 @@ void main() Time=iTime; MousePos = iMousePos; CamPos = iCamPos; - CamDir = iCamDir; + fovValue = iFovValue; } diff --git a/shaders/quad.fs b/shaders/quad.fs index e42cf75..239a596 100644 --- a/shaders/quad.fs +++ b/shaders/quad.fs @@ -4,7 +4,7 @@ in vec2 FragCoord; in float Time; in vec2 MousePos; in vec3 CamPos; -in vec3 CamDir; +in float fovValue; out vec4 FragColor; //uniform sampler2D generalTexture; @@ -101,7 +101,7 @@ void main(){ vec3 ex = normalize(cross(ez,vec3(0.,1.,0.))); vec3 ey = cross(ex,ez); - vec3 dir = normalize(FragCoord.x * ex + FragCoord.y*ey + 1.*ez); + vec3 dir = normalize(FragCoord.x * ex + FragCoord.y*ey + fovValue*ez); //float c=Mandel(FragCoord*1.5);