Источник как часть сцены
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "Lights.h"
|
||||
|
||||
#include <stdexcept>
|
||||
|
||||
GLuint Light::count = 0; // количество используемых источников (должно быть <= MAX_LIGHTS)
|
||||
LightData Light::data[MAX_LIGHTS]; // Массив данных по источникам света
|
||||
|
||||
@@ -20,3 +22,45 @@ void Light::upload(UBO& lights_data)
|
||||
// Загружаем кол-во источников
|
||||
lights_data.loadSub(&count, sizeof(count), LightDataSize*MAX_LIGHTS);
|
||||
}
|
||||
|
||||
// Метод пересчета матрицы трансформации по необходимости, должен сбрасывать флаг changed
|
||||
void Light::recalcMatrices()
|
||||
{
|
||||
// Если были изменения - необходимо загрузить данные
|
||||
if (changed || parent_changed)
|
||||
uploadReq = true;
|
||||
|
||||
// Выполняем вычисление матриц методом родительского класса
|
||||
Node::recalcMatrices();
|
||||
}
|
||||
|
||||
// Константный доступ к цвету
|
||||
const glm::vec3& Light::c_color() const
|
||||
{
|
||||
return color;
|
||||
}
|
||||
|
||||
// Неконстантная ссылка для изменений цвета
|
||||
glm::vec3& Light::e_color()
|
||||
{
|
||||
uploadReq = true;
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
// Проверка что не взаимодествуем с пустым источником
|
||||
void Light::check_id()
|
||||
{
|
||||
if (index < 0
|
||||
|| index >= count)
|
||||
throw std::runtime_error("Попытка использовать ссылку на пустой или некорректный источник");
|
||||
}
|
||||
|
||||
// Преобразует информацию об источнике в структуру LightData
|
||||
void Light::toData()
|
||||
{
|
||||
check_id(); // Проверка на работу с корректным индексом
|
||||
|
||||
data[index].position = glm::vec3(result_transform[3]); // Позиция из матрицы трансформации
|
||||
data[index].color = color; // Цвет
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user