I dunno why it doesn't work currently be we should have a working camera
This commit is contained in:
parent
f364da6272
commit
19ad21dd7e
4 changed files with 77 additions and 23 deletions
|
|
@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
|
||||||
|
|
||||||
project(Game)
|
project(Game)
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
set(CMAKE_CXX_CLANG_TIDY)
|
||||||
|
|
||||||
file(GLOB_RECURSE SOURCE_FILES
|
file(GLOB_RECURSE SOURCE_FILES
|
||||||
${CMAKE_SOURCE_DIR}/src/*.c
|
${CMAKE_SOURCE_DIR}/src/*.c
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,51 @@ PlayerCamera::PlayerCamera() {
|
||||||
|
|
||||||
PlayerCamera::~PlayerCamera() {}
|
PlayerCamera::~PlayerCamera() {}
|
||||||
|
|
||||||
void PlayerCamera::tick() {}
|
void PlayerCamera::tick() {
|
||||||
|
pos.vectorPos = glm::vec4(0.0f, 0.0f, 5.0f, 1.0f);
|
||||||
|
// Get the mouse movement
|
||||||
|
int mouseX, mouseY;
|
||||||
|
SDL_GetRelativeMouseState(&mouseX, &mouseY);
|
||||||
|
|
||||||
glm::mat4 PlayerCamera::getMVP() {}
|
// Calculate rotation
|
||||||
|
pos.yaw -= mouseX * mouseSensitivity;
|
||||||
|
pos.pitch -= mouseX * mouseSensitivity;
|
||||||
|
|
||||||
|
// Stop camera from looking too far up/down
|
||||||
|
const float maxPitch = glm::radians(89.0f);
|
||||||
|
if (pos.pitch > maxPitch)
|
||||||
|
pos.pitch = maxPitch;
|
||||||
|
if (pos.pitch < -maxPitch)
|
||||||
|
pos.pitch = -maxPitch;
|
||||||
|
|
||||||
|
glm::vec4 playerForward(0.0f, 0.0f, -1.0f, 0.0f);
|
||||||
|
glm::mat4 playerRotation;
|
||||||
|
// Rotate yaw
|
||||||
|
playerRotation =
|
||||||
|
glm::rotate(playerRotation, pos.yaw, glm::vec3(0.0f, 1.0f, 0.0f));
|
||||||
|
// Rotate pitch
|
||||||
|
playerRotation =
|
||||||
|
glm::rotate(playerRotation, pos.pitch, glm::vec3(1.0f, 0.0f, 0.0f));
|
||||||
|
playerForward = playerRotation * playerForward;
|
||||||
|
|
||||||
|
// until we add keyboard stuff set the position to a static value
|
||||||
|
|
||||||
|
// create MVP
|
||||||
|
glm::mat4 view = glm::lookAt(
|
||||||
|
glm::vec3(pos.vectorPos),
|
||||||
|
glm::vec3(pos.vectorPos +
|
||||||
|
playerForward /* glm::vec4(0.0f, 0.0f, -1.0f, 0.0f) */),
|
||||||
|
glm::vec3(0.0f, 1.0f, 0.0f));
|
||||||
|
|
||||||
|
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1
|
||||||
|
// unit <-> 100 units
|
||||||
|
float width = 800;
|
||||||
|
float height = 600;
|
||||||
|
glm::mat4 projection = glm::perspective(
|
||||||
|
glm::radians(45.0f), (float)width / (float)height, 0.1f, 100.0f);
|
||||||
|
glm::mat4 transform = glm::mat4(1.0f);
|
||||||
|
|
||||||
|
MVP = projection * view * transform;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::mat4 PlayerCamera::getMVP() { return MVP; }
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,26 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include "Error.h"
|
||||||
#include <SDL2/SDL_mouse.h>
|
#include <SDL2/SDL_mouse.h>
|
||||||
#include <SDL2/SDL_stdinc.h>
|
#include <SDL2/SDL_stdinc.h>
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class PlayerCamera {
|
class PlayerCamera {
|
||||||
private:
|
private:
|
||||||
|
// Error reporting class
|
||||||
|
Error error = Error("PlayerCamera");
|
||||||
// Constants for speed and sensitivity
|
// Constants for speed and sensitivity
|
||||||
const float movementSpeed = 0.05f;
|
const float movementSpeed = 0.005f;
|
||||||
const float mouseSensitivity = 0.05f;
|
const float mouseSensitivity = 0.005f;
|
||||||
|
|
||||||
// Player position
|
// Player position
|
||||||
struct position {
|
struct position {
|
||||||
glm::vec4 location;
|
glm::vec4 vectorPos;
|
||||||
float pitch;
|
float pitch;
|
||||||
float yaw;
|
float yaw;
|
||||||
};
|
} pos;
|
||||||
|
|
||||||
// Mouse position
|
// Mouse position
|
||||||
int mouseX, mouseY;
|
int mouseX, mouseY;
|
||||||
|
|
|
||||||
38
src/main.cpp
38
src/main.cpp
|
|
@ -1,6 +1,4 @@
|
||||||
// Include Config header generated by GNU autotools
|
// Include Config header generated by GNU autotools
|
||||||
//#include "../config.h"
|
|
||||||
//#include "../config_file_paths.h"
|
|
||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
// Make sure Glew is loaded first
|
// Make sure Glew is loaded first
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
|
|
@ -16,6 +14,8 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
// Shader
|
// Shader
|
||||||
#include "ShaderLoader.h"
|
#include "ShaderLoader.h"
|
||||||
|
// Camera
|
||||||
|
#include "PlayerCamera.h"
|
||||||
|
|
||||||
// Include error class
|
// Include error class
|
||||||
#include "Error.h"
|
#include "Error.h"
|
||||||
|
|
@ -155,24 +155,26 @@ int main(int argc, char **argv) {
|
||||||
// Mess with perspective
|
// Mess with perspective
|
||||||
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1
|
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1
|
||||||
// unit <-> 100 units
|
// unit <-> 100 units
|
||||||
float width = 4;
|
float width = 800;
|
||||||
float height = 3;
|
float height = 600;
|
||||||
glm::mat4 Projection = glm::perspective(
|
glm::mat4 Projection = glm::perspective(
|
||||||
glm::radians(45.0f), (float)width / (float)height, 0.1f, 100.0f);
|
glm::radians(45.0f), (float)width / (float)height, 0.1f, 100.0f);
|
||||||
|
|
||||||
// Camera matrix
|
//// Camera matrix
|
||||||
glm::mat4 View = glm::lookAt(
|
// glm::mat4 View = glm::lookAt(
|
||||||
glm::vec3(4, 3, 3), // Camera is at (4,3,3), in World Space
|
// glm::vec3(4, 3, 3), // Camera is at (4,3,3), in World Space
|
||||||
glm::vec3(0, 0, 0), // and looks at the origin
|
// glm::vec3(0, 0, 0), // and looks at the origin
|
||||||
glm::vec3(0, 1, 0) // Head is up (set to 0,-1,0 to look upside-down)
|
// glm::vec3(0, 1, 0) // Head is up (set to 0,-1,0 to look upside-down)
|
||||||
);
|
//);
|
||||||
// Model matrix : an identity matrix (model will be at the origin)
|
//// Model matrix : an identity matrix (model will be at the origin)
|
||||||
glm::mat4 Model = glm::mat4(1.0f);
|
// glm::mat4 Model = glm::mat4(1.0f);
|
||||||
|
|
||||||
// Our ModelViewProjection : multiplication of our 3 matrices
|
//// Our ModelViewProjection : multiplication of our 3 matrices
|
||||||
glm::mat4 mvp =
|
// glm::mat4 mvp =
|
||||||
Projection * View *
|
// Projection * View *
|
||||||
Model; // Remember, matrix multiplication is the other way around
|
// Model; // Remember, matrix multiplication is the other way around
|
||||||
|
|
||||||
|
PlayerCamera camera;
|
||||||
|
|
||||||
// Game loop
|
// Game loop
|
||||||
bool running = true;
|
bool running = true;
|
||||||
|
|
@ -185,6 +187,8 @@ int main(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
// TODO: Do something with keys lol
|
// TODO: Do something with keys lol
|
||||||
};
|
};
|
||||||
|
camera.tick();
|
||||||
|
|
||||||
// Clear screen ready for next loop
|
// Clear screen ready for next loop
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
@ -192,7 +196,7 @@ int main(int argc, char **argv) {
|
||||||
// glUseProgram(shaderProgram);
|
// glUseProgram(shaderProgram);
|
||||||
|
|
||||||
// Send our glsl shader our mvp
|
// Send our glsl shader our mvp
|
||||||
shader.setMat4("MVP", mvp);
|
shader.setMat4("MVP", camera.getMVP());
|
||||||
shader.use();
|
shader.use();
|
||||||
|
|
||||||
// I think this is meant to be here but it breaks...
|
// I think this is meant to be here but it breaks...
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue