Skip to content
Snippets Groups Projects
Commit 2d88efd6 authored by Martin Štourač's avatar Martin Štourač
Browse files

use simulator param. for mouse, kb, persp. matrix

parent 042bff02
No related branches found
No related tags found
No related merge requests found
#ifndef CAMERA_INCLUDED
#define CAMERA_INCLUDED
#include<glad/glad.h>
#include <glad/glad.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
......@@ -12,11 +12,17 @@ class Camera
glm::vec3 frontVec = glm::vec3(0.0f, 0.0f, -1.0f);
glm::vec3 upVec = glm::vec3(0.0f, 1.0f, 0.0f);
const float speed = 0.05f; //TO DO: change
float speed_multiplier = 2.5f;
float speed = 0; //TO DO: change
glm::vec2 sens;
float sens_multiplier = 400.0f;
float pitch = 0.0f;
float yaw = -90.0f;
glm::u32vec2 window_size = glm::u32vec2{0, 0};
public:
void forward();
void backward();
......@@ -34,8 +40,18 @@ class Camera
glm::vec3 getPosVec();
glm::vec3 getUpVec();
void setFrontVec();
//void setPosVec();
//void setUpVec();
//void setPosVec(); TO DO
//void setUpVec(); TO DO
void setSpeed(float dt);
void setSpeedMultiplier(float multiplier);
glm::vec2 getSens();
void setSens(float x_size, float y_size);
void setSensMultiplier(float multiplier);
glm::vec2 getWindowSize();
void setWindowSize(glm::u32vec2 size);
};
#endif
\ No newline at end of file
......@@ -7,7 +7,7 @@ class VBO
{
unsigned int ID;
public:
public:
VBO();
void Bind();
void Unbind();
......
......@@ -58,3 +58,38 @@ void Camera::setFrontVec()
// void Camera::setPosVec()
// void Camera::setUpVec()
void Camera::setSpeed(float dt)
{
speed = speed_multiplier * dt;
}
void Camera::setSpeedMultiplier(float multiplier)
{
speed_multiplier = multiplier;
}
glm::vec2 Camera::getSens()
{
return sens;
}
void Camera::setSens(float x_size, float y_size)
{
sens.x = sens_multiplier * x_size;
sens.y = sens_multiplier * y_size;
}
void Camera::setSensMultiplier(float multiplier)
{
sens_multiplier = multiplier;
}
glm::vec2 Camera::getWindowSize()
{
return window_size;
}
void Camera::setWindowSize(glm::u32vec2 size)
{
window_size = size;
}
\ No newline at end of file
......@@ -143,7 +143,11 @@ void gfx_draw(Shader &myShader, VAO &VAO, Camera camera)
view = glm::lookAt(camera.getPosVec(), camera.getPosVec() + camera.getFrontVec(), camera.getUpVec());
glm::mat4 projection;
projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);
//projection = glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f);
projection = glm::perspective(glm::radians(45.0f),
camera.getWindowSize().x / camera.getWindowSize().y,
0.1f,
100.0f);
send_matrices_to_shader(myShader, model, view, projection);
......
......@@ -29,8 +29,6 @@ struct Simulator : public osi::Simulator
void process_input();
void process_mouse();
private:
//unsigned int VBO, VAO, EBO; //predelat na vlastni tridy + procedural gen
......@@ -39,11 +37,6 @@ struct Simulator : public osi::Simulator
EBO myEBO;
Camera camera;
int prev_mouse_x;
int prev_mouse_y;
const uint8_t* keyboard;
Shader myShader;
};
......
......@@ -47,12 +47,14 @@ Simulator::Simulator()
, myEBO{EBO{}}
, myShader{create_shader_program()}
{
// get_vertices(vertices, v_size);
// get_indices(indices, i_size);
// get_vertices(vertices, v_size); TO DO
// get_indices(indices, i_size); TO DO
myVBO.SendData(vertices_cube, sizeof(vertices_cube));
myEBO.SendData(indices_cube, sizeof(indices_cube));
create_buffer(myVAO, myVBO, myEBO); //bool
camera.setWindowSize(window().size());
}
Simulator::~Simulator()
......@@ -67,6 +69,7 @@ void Simulator::update()
// Update the state (i.e., transform objects, create/destroy objects, ... )
process_input();
process_mouse();
}
void Simulator::present()
......@@ -78,61 +81,60 @@ void Simulator::present()
ImGui::Text("Hello, world!");
ImGui::End();
if (window().is_resized())
{
camera.setWindowSize(window().size());
}
gfx_draw(myShader, myVAO, camera);
}
void Simulator::process_input()
{
SDL_PumpEvents();
keyboard = SDL_GetKeyboardState(NULL);
if (! window().has_keyboard_focus())
return;
camera.setSpeed(timer().dt());
const float cameraSpeed = 0.05f; // adjust accordingly
if (keyboard[SDL_SCANCODE_W])
if (keyboard().down().contains("W"))
camera.forward();
if (keyboard[SDL_SCANCODE_S])
if (keyboard().down().contains("S"))
camera.backward();
if (keyboard[SDL_SCANCODE_A])
if (keyboard().down().contains("A") && !keyboard().just_released().contains("A"))
camera.left();
if (keyboard[SDL_SCANCODE_D])
if (keyboard().down().contains("D") && !keyboard().just_released().contains("D"))
camera.right();
if (keyboard[SDL_SCANCODE_R])
if (keyboard().down().contains("R"))
camera.up();
if (keyboard[SDL_SCANCODE_F])
if (keyboard().down().contains("F"))
camera.down();
int fill_mode = keyboard[SDL_SCANCODE_X] ? GL_FILL : GL_LINE;
int fill_mode = keyboard().down().contains("X") ? GL_FILL : GL_LINE; // TO DO change
glPolygonMode(GL_FRONT_AND_BACK, fill_mode);
}
void Simulator::process_mouse()
{
//SDL_SetWindowGrab(window, SDL_TRUE); -- currently possible in run.cpp
SDL_PumpEvents();
SDL_Event event;
SDL_PollEvent(&event);
int curr_mouse_x;
int curr_mouse_y;
if (window().is_minimized())
return;
unsigned int mouse = SDL_GetMouseState(&curr_mouse_x, &curr_mouse_y);
float xoffset = 0;
float yoffset = 0;
if (!(mouse & SDL_BUTTON_LMASK))
if (true /*mouse().down().contains("SDL_BUTTON_LMASK")*/
&& window().is_mouse_in_window())
{
prev_mouse_x = curr_mouse_x;
prev_mouse_y = curr_mouse_y;
return;
glm::i32vec2 offset = mouse().pos_delta();
xoffset = static_cast<float>(offset.x);
yoffset = static_cast<float>(-offset.y);
camera.setSens(window().pixel_size_in_meters().x, // if window.is_resized()? Něco na ten způsob
window().pixel_size_in_meters().y);
xoffset *= camera.getSens().x;
yoffset *= camera.getSens().y;
}
float xoffset = static_cast<float>(curr_mouse_x - prev_mouse_x);
float yoffset = static_cast<float>(prev_mouse_y - curr_mouse_y);
prev_mouse_x = curr_mouse_x;
prev_mouse_y = curr_mouse_y;
const float sensitivity = 0.1f;
xoffset *= sensitivity;
yoffset *= sensitivity;
// Zabalit do camera.turn(xoffset, yoffset) ?
camera.setYaw(xoffset);
camera.setPitch(yoffset);
camera.setFrontVec();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment