From 91efcb5b58b3033221bb9205564b2ddfe42fcdd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Sun, 19 May 2024 20:30:20 +0200 Subject: [PATCH] fix camera light --- src/edit/include/edit/scene.hpp | 2 +- src/edit/src/scene.cpp | 6 +++--- src/gfx/include/gfx/light.hpp | 8 +++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/edit/include/edit/scene.hpp b/src/edit/include/edit/scene.hpp index 3ad8084..df098f1 100644 --- a/src/edit/include/edit/scene.hpp +++ b/src/edit/include/edit/scene.hpp @@ -111,7 +111,7 @@ public: void addLight(node_ptr node, light_ptr light); void addLight(node_ptr node, Light light); void addLight(node_ptr node, glm::vec3 color = glm::vec3(1.0f, 1.0f, 1.0f), bool is_point = true); - void addLight(node_ptr node, glm::vec4 ambient_color, glm::vec4 diffuse_color, glm::vec4 specular_color, bool _is_point = true); + void addLight(node_ptr node, glm::vec4 ambient_color, glm::vec4 diffuse_color, glm::vec4 specular_color, bool _is_point = true, bool use_rotation = false); void addLight(node_ptr node, glm::vec4 ambient_color, glm::vec4 diffuse_color, glm::vec4 specular_color, glm::vec3 cone_direction); void addCamera(node_ptr node, camera_ptr camera); diff --git a/src/edit/src/scene.cpp b/src/edit/src/scene.cpp index f661dbf..68e621d 100644 --- a/src/edit/src/scene.cpp +++ b/src/edit/src/scene.cpp @@ -32,7 +32,7 @@ void Scene::createScene() auto camera_light_node = Node::create(glm::vec3(1.0f, 1.0f, 1.0f)); camera_light_node->setScale(glm::vec3(0.1f, 0.1f, 0.1f)); - addLight(camera_light_node, glm::vec4(0.0f), glm::vec4(0.5f), glm::vec4(0.0f), false); + addLight(camera_light_node, glm::vec4(0.0f), glm::vec4(0.5f), glm::vec4(0.0f), false, true); // Mesh light_cube_green(lit_cube_vertices, // std::vector<float>{}, @@ -246,9 +246,9 @@ void Scene::addLight(node_ptr node, glm::vec3 color, bool is_point) node->addObject(std::make_shared<Light>(Light{color, node, is_point})); } -void Scene::addLight(node_ptr node, glm::vec4 ambient_color, glm::vec4 diffuse_color, glm::vec4 specular_color, bool is_point) +void Scene::addLight(node_ptr node, glm::vec4 ambient_color, glm::vec4 diffuse_color, glm::vec4 specular_color, bool is_point, bool use_rotation) { - node->addObject(std::make_shared<Light>(Light{node, ambient_color, diffuse_color, specular_color, is_point})); + node->addObject(std::make_shared<Light>(Light{node, ambient_color, diffuse_color, specular_color, is_point, use_rotation})); } void Scene::addLight(node_ptr node, glm::vec4 ambient_color, glm::vec4 diffuse_color, glm::vec4 specular_color, glm::vec3 cone_direction) diff --git a/src/gfx/include/gfx/light.hpp b/src/gfx/include/gfx/light.hpp index c705d2b..6afa28d 100644 --- a/src/gfx/include/gfx/light.hpp +++ b/src/gfx/include/gfx/light.hpp @@ -12,6 +12,7 @@ protected: // glm::vec3 color; node_weak_ptr node; bool is_point; + bool use_rotation; glm::vec4 ambient_color; glm::vec4 diffuse_color; @@ -25,8 +26,8 @@ public: node{_node}, is_point{_is_point} {} /*--------------------*/ - Light(node_ptr _node, glm::vec4 _ambient_color, glm::vec4 _diffuse_color, glm::vec4 _specular_color, bool _is_point = true) - : node{_node}, is_point{_is_point}, ambient_color{_ambient_color}, diffuse_color{_diffuse_color}, specular_color{_specular_color} {} + Light(node_ptr _node, glm::vec4 _ambient_color, glm::vec4 _diffuse_color, glm::vec4 _specular_color, bool _is_point = true, bool _use_rotation = false) + : node{_node}, is_point{_is_point}, use_rotation{_use_rotation}, ambient_color{_ambient_color}, diffuse_color{_diffuse_color}, specular_color{_specular_color} {} Light(node_ptr _node, glm::vec4 _ambient_color, glm::vec4 _diffuse_color, glm::vec4 _specular_color, glm::vec3 _cone_direction) : node{_node}, ambient_color{_ambient_color}, diffuse_color{_diffuse_color}, specular_color{_specular_color}, cone_direction{glm::vec4(_cone_direction, 0.0f)} @@ -37,7 +38,8 @@ public: virtual glm::vec4 getPosition() const { node_ptr f = node.lock(); - return glm::vec4(f->getPositionWorld(), static_cast<float>(is_point)); + return use_rotation ? glm::vec4(f->getRotationAxisZWorld(), static_cast<float>(is_point)) + : glm::vec4(f->getPositionWorld(), static_cast<float>(is_point)); } const glm::vec4 &getAmbientColor() const { return ambient_color; } -- GitLab