Радиус действия источника
This commit is contained in:
parent
deca2767e8
commit
7ad56ddac4
|
@ -13,6 +13,7 @@ struct LightData
|
||||||
{
|
{
|
||||||
alignas(16) glm::vec3 position; // Позиция
|
alignas(16) glm::vec3 position; // Позиция
|
||||||
alignas(16) glm::vec3 color; // Цвет
|
alignas(16) glm::vec3 color; // Цвет
|
||||||
|
float radius; // Радиус действия источника
|
||||||
};
|
};
|
||||||
|
|
||||||
// Источник света
|
// Источник света
|
||||||
|
@ -28,6 +29,9 @@ class Light : public Node
|
||||||
const glm::vec3& c_color() const; // Константный доступ к цвету
|
const glm::vec3& c_color() const; // Константный доступ к цвету
|
||||||
glm::vec3& e_color(); // Неконстантная ссылка для изменений цвета
|
glm::vec3& e_color(); // Неконстантная ссылка для изменений цвета
|
||||||
|
|
||||||
|
const float& c_radius() const; // Константный доступ к радиусу
|
||||||
|
float& e_radius(); // Неконстантная ссылка для изменений радиуса
|
||||||
|
|
||||||
static void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Рисование отладочных лампочек
|
static void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Рисование отладочных лампочек
|
||||||
private:
|
private:
|
||||||
Light(); // Конструктор без параметров
|
Light(); // Конструктор без параметров
|
||||||
|
@ -36,6 +40,7 @@ class Light : public Node
|
||||||
virtual ~Light();
|
virtual ~Light();
|
||||||
|
|
||||||
glm::vec3 color; // Цвет
|
glm::vec3 color; // Цвет
|
||||||
|
float radius; // Радиус действия источника
|
||||||
|
|
||||||
int index; // Индекс в массиве отправки (может не совпадать с lights) для дефрагментированного доступа
|
int index; // Индекс в массиве отправки (может не совпадать с lights) для дефрагментированного доступа
|
||||||
static Light& findByIndex(GLuint index); // Возвращает ссылку на источник с нужным индексом
|
static Light& findByIndex(GLuint index); // Возвращает ссылку на источник с нужным индексом
|
||||||
|
|
|
@ -97,6 +97,7 @@ void Light::toData()
|
||||||
|
|
||||||
data[index].position = glm::vec3(result_transform[3]); // Позиция из матрицы трансформации
|
data[index].position = glm::vec3(result_transform[3]); // Позиция из матрицы трансформации
|
||||||
data[index].color = color; // Цвет
|
data[index].color = color; // Цвет
|
||||||
|
data[index].radius = radius; // Радиус действия источника
|
||||||
}
|
}
|
||||||
|
|
||||||
// Возвращает ссылку на новый источник света
|
// Возвращает ссылку на новый источник света
|
||||||
|
@ -143,7 +144,7 @@ Light& Light::findByIndex(GLuint index)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Конструктор без параметров
|
// Конструктор без параметров
|
||||||
Light::Light() : Node(), index(-1), uploadReq(false), color(1.0f)
|
Light::Light() : Node(), index(-1), uploadReq(false), color(1.0f), radius(10.0f)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -157,6 +158,7 @@ Light& Light::operator=(const Light& other)
|
||||||
index = other.index; // Переносим индекс
|
index = other.index; // Переносим индекс
|
||||||
uploadReq = other.uploadReq; // Необходимость загрузки
|
uploadReq = other.uploadReq; // Необходимость загрузки
|
||||||
color = other.color;
|
color = other.color;
|
||||||
|
radius = other.radius;
|
||||||
|
|
||||||
Node::operator=(other);
|
Node::operator=(other);
|
||||||
}
|
}
|
||||||
|
@ -186,3 +188,17 @@ void Light::render(ShaderProgram &shaderProgram, UBO &material_buffer)
|
||||||
bulb.render(shaderProgram, material_buffer);
|
bulb.render(shaderProgram, material_buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Константный доступ к радиусу
|
||||||
|
const float& Light::c_radius() const
|
||||||
|
{
|
||||||
|
return radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Неконстантная ссылка для изменений радиуса
|
||||||
|
float& Light::e_radius()
|
||||||
|
{
|
||||||
|
uploadReq = true;
|
||||||
|
|
||||||
|
return radius;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue