diff --git a/include/Lights.h b/include/Lights.h index ead98fe..cbb1e52 100644 --- a/include/Lights.h +++ b/include/Lights.h @@ -32,13 +32,18 @@ class Bulb }; // Класс лампочки (точечный источник с возможностью отладочного вывода) -class BulbDebug +class BulbDebug : public I_Movable { public: BulbDebug(Bulb* ref = NULL); // Конструктор с привязкой к источнику void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Отрисовка отладочной лампы и сферы - + + virtual void dPosition(const glm::vec3& dvec); // Сдвинуть объект на dvec + virtual void dRotation(const glm::vec3& dvec); // Повернуть объект на dvec + virtual void dScale(const glm::vec3& dvec); // Увеличить объект на dvec + virtual const glm::vec3 getPos(); // Получить позицию объекта + Bulb* data; private: static GrouptedModel bulb_model; diff --git a/src/Lights.cpp b/src/Lights.cpp index 504df62..62871bf 100644 --- a/src/Lights.cpp +++ b/src/Lights.cpp @@ -158,3 +158,40 @@ void Bulb::recalc_pov() vp[4] = shadowProj * glm::lookAt(position, position + glm::vec3( 0.0f, 0.0f, 1.0f), glm::vec3(0.0f, -1.0f, 0.0f)); vp[5] = shadowProj * glm::lookAt(position, position + glm::vec3( 0.0f, 0.0f, -1.0f), glm::vec3(0.0f, -1.0f, 0.0f)); } + +// Сдвинуть объект на dvec +void BulbDebug::dPosition(const glm::vec3& dvec) +{ + if (data) + data->position += dvec; +} + +#include +// Повернуть объект на dvec +void BulbDebug::dRotation(const glm::vec3& dvec) +{ + if (data) + { + data->direction = glm::rotateX(data->direction, 0.1f*dvec.x); + data->direction = glm::rotateY(data->direction, 0.1f*dvec.y); + data->direction = glm::rotateZ(data->direction, 0.1f*dvec.z); + } +} + +// Увеличить объект на dvec +void BulbDebug::dScale(const glm::vec3& dvec) +{ + if (data) + { + data->radius += (dvec.x + dvec.y + dvec.z)*500; + } +} + +// Получить позицию объекта +const glm::vec3 BulbDebug::getPos() +{ + if (data) + return data->position; + else + return glm::vec3(0); +}