Инструмент взаимодействует со светом

This commit is contained in:
parent ff73d64e06
commit de0a6beea8
2 changed files with 44 additions and 2 deletions

View File

@ -32,13 +32,18 @@ class Bulb
}; };
// Класс лампочки (точечный источник с возможностью отладочного вывода) // Класс лампочки (точечный источник с возможностью отладочного вывода)
class BulbDebug class BulbDebug : public I_Movable
{ {
public: public:
BulbDebug(Bulb* ref = NULL); // Конструктор с привязкой к источнику BulbDebug(Bulb* ref = NULL); // Конструктор с привязкой к источнику
void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Отрисовка отладочной лампы и сферы 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; Bulb* data;
private: private:
static GrouptedModel bulb_model; static GrouptedModel bulb_model;

View File

@ -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[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)); 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 <glm/gtx/rotate_vector.hpp>
// Повернуть объект на 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);
}