dodanie obrotu skyboxa i sterowanie klawiszami

This commit is contained in:
K4RP4T 2024-02-08 02:32:23 +01:00
parent 77f42acbeb
commit c2105f2d16
2 changed files with 33 additions and 9 deletions

View File

@ -3,14 +3,14 @@ Pos=60,60
Size=400,400 Size=400,400
[Window][Planet] [Window][Planet]
Pos=1,195 Pos=1,217
Size=327,227 Size=327,227
[Window][Sun] [Window][Sun]
Pos=1,424 Pos=1,445
Size=327,122 Size=327,118
[Window][General] [Window][General]
Pos=1,0 Pos=1,0
Size=327,193 Size=327,216

View File

@ -73,6 +73,7 @@ GLuint skyBoxTex;
glm::vec3 skyBoxPos = glm::vec3(0.f, 0.f, 0.f); glm::vec3 skyBoxPos = glm::vec3(0.f, 0.f, 0.f);
float skyBoxSize = 3.f; float skyBoxSize = 3.f;
float skyBoxRot = 0.f;
glm::vec3 cameraPos = glm::vec3(-2.f, 0.f, 0.f); glm::vec3 cameraPos = glm::vec3(-2.f, 0.f, 0.f);
glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f); glm::vec3 cameraDir = glm::vec3(1.f, 0.f, 0.f);
@ -179,6 +180,10 @@ void showGUI() {
if (ImGui::Begin("General")) if (ImGui::Begin("General"))
{ {
ImGui::Checkbox("Sky Box", &skyBoxCheck); ImGui::Checkbox("Sky Box", &skyBoxCheck);
if (skyBoxCheck)
ImGui::SliderFloat("Rotation", &skyBoxRot, 0.0f, 360.0f, "%.3f", ImGuiSliderFlags_AlwaysClamp);
ImGui::Checkbox("Tone Mapping", &toneMappingCheck); ImGui::Checkbox("Tone Mapping", &toneMappingCheck);
ImGui::SliderInt("Bloom Level", &blur_count, 1, 5, "%d", ImGuiSliderFlags_AlwaysClamp); ImGui::SliderInt("Bloom Level", &blur_count, 1, 5, "%d", ImGuiSliderFlags_AlwaysClamp);
ImGui::Checkbox("Lighting Model: ", &lightingCheck); ImGui::Checkbox("Lighting Model: ", &lightingCheck);
@ -224,7 +229,7 @@ void showGUI() {
if (atmosphereCheck) { if (atmosphereCheck) {
ImGui::Text("Clouds"); ImGui::Text("Clouds");
ImGui::SliderFloat("Intensity", &cloudIntensity, 0.0f, 100.0f, "%.3f", ImGuiSliderFlags_AlwaysClamp); ImGui::SliderFloat("Intensity", &cloudIntensity, 0.0f, 100.0f, "%.3f", ImGuiSliderFlags_AlwaysClamp);
ImGui::SliderFloat("Brightness", &cloudBrightness, 0.01f, 0.20f, "%.3f", ImGuiSliderFlags_AlwaysClamp); ImGui::SliderFloat("Brightness", &cloudBrightness, 0.0f, 0.20f, "%.3f", ImGuiSliderFlags_AlwaysClamp);
ImGui::SliderFloat("Motion", &cloudMotion, -0.5f, 0.5f, "%.3f", ImGuiSliderFlags_AlwaysClamp); ImGui::SliderFloat("Motion", &cloudMotion, -0.5f, 0.5f, "%.3f", ImGuiSliderFlags_AlwaysClamp);
} }
}ImGui::End(); }ImGui::End();
@ -467,18 +472,19 @@ void renderScene(GLFWwindow* window) {
//rysowanie słońca //rysowanie słońca
glm::mat4 sunScale = glm::scale(glm::vec3(sunSize)); glm::mat4 sunScale = glm::scale(glm::vec3(sunSize));
glm::mat4 sunTranslate = glm::translate(sunPos);
glm::mat4 sunRotate = glm::rotate(PI, glm::vec3(0, 1, 0)); glm::mat4 sunRotate = glm::rotate(PI, glm::vec3(0, 1, 0));
glm::mat4 sunTranslate = glm::translate(sunPos);
drawSun(sphereContext, sunTranslate * sunRotate * sunScale, sunTex); drawSun(sphereContext, sunTranslate * sunRotate * sunScale, sunTex);
//rysowanie skyboxa //rysowanie skyboxa
skyBoxPos = cameraPos; skyBoxPos = cameraPos;
glm::mat4 skyBoxScale = glm::scale(glm::vec3(skyBoxSize)); glm::mat4 skyBoxScale = glm::scale(glm::vec3(skyBoxSize));
glm::mat4 skyBoxRotate = glm::rotate(glm::radians(skyBoxRot), glm::vec3(0, 1, 0));
glm::mat4 skyBoxTranslate = glm::translate(skyBoxPos); glm::mat4 skyBoxTranslate = glm::translate(skyBoxPos);
if (skyBoxCheck) if (skyBoxCheck)
drawSkyBox(cubeContext, skyBoxTranslate * skyBoxScale, skyBoxTex); drawSkyBox(cubeContext, skyBoxTranslate * skyBoxRotate * skyBoxScale, skyBoxTex);
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
@ -521,7 +527,7 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
planetTex = Core::LoadTexture(planetTexPaths[planetTexIndex]); planetTex = Core::LoadTexture(planetTexPaths[planetTexIndex]);
} }
if (key == GLFW_KEY_Y && action == GLFW_PRESS) { else if (key == GLFW_KEY_Y && action == GLFW_PRESS) {
--planetTexIndex; --planetTexIndex;
if (planetTexIndex < 0) if (planetTexIndex < 0)
@ -539,7 +545,7 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
sunTex = Core::LoadTexture(sunTexPaths[sunTexIndex]); sunTex = Core::LoadTexture(sunTexPaths[sunTexIndex]);
} }
if (key == GLFW_KEY_I && action == GLFW_PRESS) { else if (key == GLFW_KEY_I && action == GLFW_PRESS) {
--sunTexIndex; --sunTexIndex;
if (sunTexIndex < 0) if (sunTexIndex < 0)
@ -564,6 +570,10 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
if (key == GLFW_KEY_Q && action == GLFW_PRESS) if (key == GLFW_KEY_Q && action == GLFW_PRESS)
skyBoxCheck = !skyBoxCheck; skyBoxCheck = !skyBoxCheck;
//tonemapping
if (key == GLFW_KEY_F && action == GLFW_PRESS)
toneMappingCheck = !toneMappingCheck;
//bloom //bloom
if (key == GLFW_KEY_M && action == GLFW_PRESS) { if (key == GLFW_KEY_M && action == GLFW_PRESS) {
blur_count++; blur_count++;
@ -659,6 +669,20 @@ void processInput(GLFWwindow* window)
cloudBrightness += brightnessSpeed; cloudBrightness += brightnessSpeed;
else if (glfwGetKey(window, GLFW_KEY_B) == GLFW_PRESS && cloudBrightness > 0.01f) else if (glfwGetKey(window, GLFW_KEY_B) == GLFW_PRESS && cloudBrightness > 0.01f)
cloudBrightness -= brightnessSpeed; cloudBrightness -= brightnessSpeed;
//wielkość słońca
if (glfwGetKey(window, GLFW_KEY_7) == GLFW_PRESS && sunSize < 0.1f)
sunSize += sizeSpeed * 10;
else if (glfwGetKey(window, GLFW_KEY_8) == GLFW_PRESS && sunSize > 0.01f)
sunSize -= sizeSpeed * 10;
//obrót skyboxa
float rotSpeed = 1.0f;
if (glfwGetKey(window, GLFW_KEY_9) == GLFW_PRESS && skyBoxRot < 360.0f)
skyBoxRot += rotSpeed;
else if (glfwGetKey(window, GLFW_KEY_0) == GLFW_PRESS && skyBoxRot > 0.0f)
skyBoxRot -= rotSpeed;
} }
void init(GLFWwindow* window) { void init(GLFWwindow* window) {