From de0a6beea8c2eb6a0d3aeee063e3d738576b8464 Mon Sep 17 00:00:00 2001 From: "R.E. Kovalev" Date: Wed, 5 Apr 2023 16:14:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D1=83=D0=B5=D1=82=20=D1=81=D0=BE?= =?UTF-8?q?=20=D1=81=D0=B2=D0=B5=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Lights.h | 9 +++++++-- src/Lights.cpp | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) 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); +}