adding fov and speed control wheel

This commit is contained in:
MagicTINTIN 2023-03-15 11:45:48 +01:00
parent 08d0e691fb
commit 9da5a33893
3 changed files with 34 additions and 10 deletions

34
main.c
View file

@ -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
}

View file

@ -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;
}

View file

@ -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);