diff --git a/src/edit/include/edit/scene.hpp b/src/edit/include/edit/scene.hpp index 3ad8084e486f16488c86fd90cfa5d81d803e0519..df098f1dfc60528da4919c9b6d1147e4800c5eb0 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 f661dbf51f106b6b50d87b898d9b1b07c4ef5613..68e621d11741ee142560ffd15f08fa7578845c2b 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 c705d2b3f48bc07522b62bfbfd6cb53f6605e65f..6afa28df658314e0a06cf754fc018ddd12e231f5 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; }