From fed15e4ff8df6d510c35604458bf40dfd6957d9c Mon Sep 17 00:00:00 2001 From: maelstrom Date: Tue, 15 Oct 2024 18:52:22 +0200 Subject: [PATCH] A skybox that actually renders! --- assets/shaders/skybox.fs | 11 ++++++----- assets/shaders/skybox.vs | 10 ++++------ src/rendering/renderer.cpp | 17 ++++++++++++++--- src/rendering/skybox.cpp | 2 +- src/rendering/skybox.h | 3 ++- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/assets/shaders/skybox.fs b/assets/shaders/skybox.fs index d6f55b1..dd8d258 100644 --- a/assets/shaders/skybox.fs +++ b/assets/shaders/skybox.fs @@ -1,15 +1,16 @@ #version 330 core -uniform sampler2D uTexture; +uniform samplerCube skybox; -in vec3 vPos; -in vec3 vNormal; -in vec2 vTexCoords; +// in vec3 vPos; +// in vec3 vNormal; +in vec3 vTexCoords; out vec4 fColor; // Main void main() { - fColor = texture(uTexture, vTexCoords); + // fColor = texture(uTexture, vTexCoords); + fColor = texture(skybox, vTexCoords); } diff --git a/assets/shaders/skybox.vs b/assets/shaders/skybox.vs index 0cc797e..24ddcd6 100644 --- a/assets/shaders/skybox.vs +++ b/assets/shaders/skybox.vs @@ -3,17 +3,15 @@ layout (location = 0) in vec3 aPos; layout (location = 1) in vec3 aNormal; layout (location = 2) in vec2 aTexCoords; -out vec3 vPos; -out vec3 vNormal; -out vec2 vTexCoords; +// out vec3 vPos; +// out vec3 vNormal; +out vec3 vTexCoords; uniform mat4 view; uniform mat4 projection; void main() { + vTexCoords = aPos; gl_Position = projection * view * vec4(aPos, 1.0); - vPos = vec3(vec4(aPos, 1.0)); - vNormal = aNormal; - vTexCoords = aTexCoords; } diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index 305dfb8..d5821e1 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -13,6 +14,7 @@ #include "defaultmeshes.h" #include "../camera.h" #include "../part.h" +#include "skybox.h" #include "texture.h" #include "renderer.h" @@ -21,7 +23,7 @@ Shader *shader = NULL; Shader *skyboxShader = NULL; extern Camera camera; extern std::vector parts; -Texture* skyboxTexture = NULL; +Skybox* skyboxTexture = NULL; void renderInit(GLFWwindow* window) { glViewport(0, 0, 1200, 900); @@ -30,7 +32,14 @@ void renderInit(GLFWwindow* window) { glEnable(GL_DEPTH_TEST); - skyboxTexture = new Texture("assets/textures/skybox/null_plainsky512_ft.jpg", GL_RGB); + skyboxTexture = new Skybox({ + "assets/textures/skybox/null_plainsky512_rt.jpg", + "assets/textures/skybox/null_plainsky512_lf.jpg", + "assets/textures/skybox/null_plainsky512_up.jpg", + "assets/textures/skybox/null_plainsky512_dn.jpg", + "assets/textures/skybox/null_plainsky512_ft.jpg", + "assets/textures/skybox/null_plainsky512_bk.jpg", + }, GL_RGB); // Compile shader shader = new Shader("assets/shaders/phong.vs", "assets/shaders/phong.fs"); @@ -95,7 +104,9 @@ void renderSkyBox() { skyboxShader->use(); glm::mat4 projection = glm::perspective(glm::radians(45.f), (float)1200 / (float)900, 0.1f, 100.0f); - glm::mat4 view = camera.getLookAt(); + // Remove translation component of view, making us always at (0, 0, 0) + glm::mat4 view = glm::mat4(glm::mat3(camera.getLookAt())); + skyboxShader->set("projection", projection); skyboxShader->set("view", view); diff --git a/src/rendering/skybox.cpp b/src/rendering/skybox.cpp index f7d3caa..b53b36d 100644 --- a/src/rendering/skybox.cpp +++ b/src/rendering/skybox.cpp @@ -4,7 +4,7 @@ #include "skybox.h" -Skybox::Skybox(std::vector faces, unsigned int format) { +Skybox::Skybox(std::array faces, unsigned int format) { glGenTextures(1, &this->ID); glBindTexture(GL_TEXTURE_CUBE_MAP, this->ID); diff --git a/src/rendering/skybox.h b/src/rendering/skybox.h index 5934cb7..ff8860b 100644 --- a/src/rendering/skybox.h +++ b/src/rendering/skybox.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #define GL_RGB 0x1907 @@ -8,7 +9,7 @@ class Skybox { private: unsigned int ID; public: - Skybox(std::vector, unsigned format = GL_RGB); + Skybox(std::array, unsigned format = GL_RGB); ~Skybox(); void activate(unsigned int textureIdx);