From c50dd6c72bba260d22c10761a979b0c1426dffec Mon Sep 17 00:00:00 2001 From: Aki Date: Mon, 7 Nov 2022 19:16:34 +0100 Subject: Added example rather low quality skybox --- kurator/CMakeLists.txt | 4 ++- kurator/resources/shaders/330/skybox.fs | 14 +++++++++ kurator/resources/shaders/330/skybox.vs | 17 +++++++++++ kurator/resources/skybox.png | Bin 0 -> 3141841 bytes kurator/src/Skybox.cpp | 49 ++++++++++++++++++++++++++++++++ kurator/src/Skybox.h | 23 +++++++++++++++ kurator/src/SkyboxTest.cpp | 47 ++++++++++++++++++++++++++++++ kurator/src/SkyboxTest.h | 29 +++++++++++++++++++ kurator/src/Title.cpp | 4 +-- 9 files changed, 184 insertions(+), 3 deletions(-) create mode 100644 kurator/resources/shaders/330/skybox.fs create mode 100644 kurator/resources/shaders/330/skybox.vs create mode 100644 kurator/resources/skybox.png create mode 100644 kurator/src/Skybox.cpp create mode 100644 kurator/src/Skybox.h create mode 100644 kurator/src/SkyboxTest.cpp create mode 100644 kurator/src/SkyboxTest.h diff --git a/kurator/CMakeLists.txt b/kurator/CMakeLists.txt index 75d00a4..0250b9d 100644 --- a/kurator/CMakeLists.txt +++ b/kurator/CMakeLists.txt @@ -1,9 +1,11 @@ project(kurator) add_executable( ${PROJECT_NAME} - src/main.cpp src/GameOver.cpp + src/main.cpp src/Session.cpp + src/Skybox.cpp + src/SkyboxTest.cpp src/Title.cpp ) target_link_libraries( diff --git a/kurator/resources/shaders/330/skybox.fs b/kurator/resources/shaders/330/skybox.fs new file mode 100644 index 0000000..ccc97d4 --- /dev/null +++ b/kurator/resources/shaders/330/skybox.fs @@ -0,0 +1,14 @@ +#version 330 + +in vec3 fragPosition; + +uniform samplerCube environmentMap; + +out vec4 finalColor; + + +void main() +{ + vec3 color = texture(environmentMap, fragPosition).rgb; + finalColor = vec4(color, 1.0); +} diff --git a/kurator/resources/shaders/330/skybox.vs b/kurator/resources/shaders/330/skybox.vs new file mode 100644 index 0000000..cfb2599 --- /dev/null +++ b/kurator/resources/shaders/330/skybox.vs @@ -0,0 +1,17 @@ +#version 330 + +in vec3 vertexPosition; + +uniform mat4 matProjection; +uniform mat4 matView; + +out vec3 fragPosition; + + +void main() +{ + fragPosition = vertexPosition; + mat4 rotView = mat4(mat3(matView)); + vec4 clipPos = matProjection * rotView * vec4(vertexPosition, 1.0); + gl_Position = clipPos; +} diff --git a/kurator/resources/skybox.png b/kurator/resources/skybox.png new file mode 100644 index 0000000..a351869 Binary files /dev/null and b/kurator/resources/skybox.png differ diff --git a/kurator/src/Skybox.cpp b/kurator/src/Skybox.cpp new file mode 100644 index 0000000..036f2a7 --- /dev/null +++ b/kurator/src/Skybox.cpp @@ -0,0 +1,49 @@ +#include "Skybox.h" + +#include + +#include +#include + + +namespace kurator +{ + + +Skybox::Skybox(const std::string& texture) +{ + Mesh cube = GenMeshCube(1.f, 1.f, 1.f); + model = LoadModelFromMesh(cube); + model.materials[0].shader = LoadShader("resources/shaders/330/skybox.vs", "resources/shaders/330/skybox.fs"); + int value {MATERIAL_MAP_CUBEMAP}; + SetShaderValue( + model.materials[0].shader, + GetShaderLocation(model.materials[0].shader, "environmentMap"), + &value, + SHADER_UNIFORM_INT); + Image image = LoadImage(texture.c_str()); + model.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture = LoadTextureCubemap(image, CUBEMAP_LAYOUT_AUTO_DETECT); + UnloadImage(image); +} + + +Skybox::~Skybox() +{ + UnloadShader(model.materials[0].shader); + UnloadTexture(model.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture); + UnloadModel(model); +} + + +void +Skybox::draw() const +{ + rlDisableBackfaceCulling(); + rlDisableDepthMask(); + DrawModel(model, {0.f, 0.f, 0.f}, 1.0f, WHITE); + rlEnableBackfaceCulling(); + rlEnableDepthMask(); +} + + +} // namespace kurator diff --git a/kurator/src/Skybox.h b/kurator/src/Skybox.h new file mode 100644 index 0000000..3f71837 --- /dev/null +++ b/kurator/src/Skybox.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +#include + + +namespace kurator +{ + + +class Skybox +{ +public: + explicit Skybox(const std::string& texture); + ~Skybox(); + void draw() const; +private: + Model model; +}; + + +} // namespace kurator diff --git a/kurator/src/SkyboxTest.cpp b/kurator/src/SkyboxTest.cpp new file mode 100644 index 0000000..85809f4 --- /dev/null +++ b/kurator/src/SkyboxTest.cpp @@ -0,0 +1,47 @@ +#include "SkyboxTest.h" + +#include +#include + +#include + +#include "GameOver.h" +#include "Session.h" + + +namespace kurator +{ + + +SkyboxTest::SkyboxTest(std::shared_ptr _session) : + session {std::move(_session)}, + camera {{1.f, 1.f, 1.f}, {4.f, 1.f, 4.f}, {0.f, 1.f, 0.f}, 45.f, 0}, + skybox {"resources/skybox.png"} +{ + SetCameraMode(camera, CAMERA_FIRST_PERSON); +} + + +void +SkyboxTest::update(const float) +{ + UpdateCamera(&camera); + if (IsKeyPressed(KEY_SPACE)) { + auto next = std::make_shared(session); + session->set(next); + } +} + + +void +SkyboxTest::draw() const +{ + ClearBackground(BLACK); + BeginMode3D(camera); + skybox.draw(); + DrawGrid(10, 1.f); + EndMode3D(); +} + + +} // namespace kurator diff --git a/kurator/src/SkyboxTest.h b/kurator/src/SkyboxTest.h new file mode 100644 index 0000000..f1ec06b --- /dev/null +++ b/kurator/src/SkyboxTest.h @@ -0,0 +1,29 @@ +#pragma once + +#include + +#include + +#include "Scene.h" +#include "Session.h" +#include "Skybox.h" + + +namespace kurator +{ + + +class SkyboxTest : public Scene +{ +public: + explicit SkyboxTest(std::shared_ptr _session); + void update(float dt) override; + void draw() const override; +private: + std::shared_ptr session; + Camera camera; + Skybox skybox; +}; + + +} // namespace kurator diff --git a/kurator/src/Title.cpp b/kurator/src/Title.cpp index 56f52a8..92d0b4d 100644 --- a/kurator/src/Title.cpp +++ b/kurator/src/Title.cpp @@ -5,8 +5,8 @@ #include -#include "GameOver.h" #include "Session.h" +#include "SkyboxTest.h" namespace kurator @@ -23,7 +23,7 @@ void Title::update(const float) { if (IsKeyPressed(KEY_SPACE)) { - auto next = std::make_shared(session); + auto next = std::make_shared(session); session->set(next); } } -- cgit v1.1