1#include "Sky/SkySettings.h"
2#include "Sky/CubeMap.h"
3#include "Utils/Utils.h"
4#include "Data/ApplicationState.h"
6#include <imgui/imgui.h>
7#include <hdritocubemap/HdriToCubemap.hpp>
9SkyManager::~SkyManager()
13 delete cubemapManager;
21 cubemap = cubemapManager->GetSkyboxCubemapTexture();
24void SkyManager::ChangeCubemapTile(
int face)
26 std::string path = ShowOpenFileDialog(
".png");
30 cubemap->LoadFace(path, face);
31 cubemap->UploadDataToGPU();
37void SkyManager::LoadHDRI(std::string path)
40 int cubemapResolution = 1024;
41 bool linearFilter =
true;
42 HdriToCubemap<unsigned char> hdriToCube_ldr(path, cubemapResolution, linearFilter);
43 cubemap->facesData[TEXTURE_CUBEMAP_PX] = hdriToCube_ldr.getLeft();
44 cubemap->facesSizes[TEXTURE_CUBEMAP_PX] =
IVec2(hdriToCube_ldr.getCubemapResolution());
45 cubemap->facesData[TEXTURE_CUBEMAP_NX] = hdriToCube_ldr.getRight();
46 cubemap->facesSizes[TEXTURE_CUBEMAP_NX] =
IVec2(hdriToCube_ldr.getCubemapResolution());
47 cubemap->facesData[TEXTURE_CUBEMAP_PY] = hdriToCube_ldr.getDown();
48 cubemap->facesSizes[TEXTURE_CUBEMAP_PY] =
IVec2(hdriToCube_ldr.getCubemapResolution());
49 cubemap->facesData[TEXTURE_CUBEMAP_NY] = hdriToCube_ldr.getUp();
50 cubemap->facesSizes[TEXTURE_CUBEMAP_NY] =
IVec2(hdriToCube_ldr.getCubemapResolution());
51 cubemap->facesData[TEXTURE_CUBEMAP_PZ] = hdriToCube_ldr.getBack();
52 cubemap->facesSizes[TEXTURE_CUBEMAP_PZ] =
IVec2(hdriToCube_ldr.getCubemapResolution());
53 cubemap->facesData[TEXTURE_CUBEMAP_NZ] = hdriToCube_ldr.getFront();
54 cubemap->facesSizes[TEXTURE_CUBEMAP_NZ] =
IVec2(hdriToCube_ldr.getCubemapResolution());
55 cubemap->UploadDataToGPU();
58void SkyManager::ShowSettings(
bool *pOpen)
60 ImGui::Begin(
"Sky Settings", pOpen);
64 if (ImGui::Button(
"Load HDRI"))
66 std::string path = ShowOpenFileDialog(
".png");
75 ImGui::Text(
"Cubemap Faces");
79 if (ImGui::ImageButton((ImTextureID)cubemap->textures[TEXTURE_CUBEMAP_PX]->GetRendererID(), ImVec2(50, 50)))
81 ChangeCubemapTile(TEXTURE_CUBEMAP_PX);
88 if (ImGui::ImageButton((ImTextureID)cubemap->textures[TEXTURE_CUBEMAP_PY]->GetRendererID(), ImVec2(50, 50)))
90 ChangeCubemapTile(TEXTURE_CUBEMAP_PY);
97 if (ImGui::ImageButton((ImTextureID)cubemap->textures[TEXTURE_CUBEMAP_PZ]->GetRendererID(), ImVec2(50, 50)))
99 ChangeCubemapTile(TEXTURE_CUBEMAP_PZ);
105 if (ImGui::ImageButton((ImTextureID)cubemap->textures[TEXTURE_CUBEMAP_NX]->GetRendererID(), ImVec2(50, 50)))
107 ChangeCubemapTile(TEXTURE_CUBEMAP_NX);
114 if (ImGui::ImageButton((ImTextureID)cubemap->textures[TEXTURE_CUBEMAP_NY]->GetRendererID(), ImVec2(50, 50)))
116 ChangeCubemapTile(TEXTURE_CUBEMAP_NY);
123 if (ImGui::ImageButton((ImTextureID)cubemap->textures[TEXTURE_CUBEMAP_NZ]->GetRendererID(), ImVec2(50, 50)))
125 ChangeCubemapTile(TEXTURE_CUBEMAP_NZ);
133 ImGui::DragFloat(
"Clouds Time", &cltime, 0.01f);
134 ImGui::DragFloat(
"Clouds UPF", &upf, 0.01f);
135 ImGui::DragFloat(
"Cirrus Clouds", &cirrus, 0.005f, -1, 1);
136 ImGui::DragFloat(
"Cumulus Clouds", &cumulus, 0.005f, -1, 1);
137 ImGui::DragFloat3(
"Sun Position", fsun, 0.01f);
142 useProcedural = ImGui::Button(
"Use Procedural Sky");
147 useProcedural = !ImGui::Button(
"Use Cubemap Sky");
152 useBox = ImGui::Button(
"Use Sky Box");
157 useBox = !ImGui::Button(
"Use Sky Sphere");
163void SkyManager::RenderSky(glm::mat4 view, glm::mat4 pers)
165 cubemapManager->RenderSkybox(view, pers, useBox, useProcedural, cirrus, cumulus, cltime, fsun, upf);