46 lines
2.5 KiB
C++
46 lines
2.5 KiB
C++
#ifndef LIGHTS_H
|
||
#define LIGHTS_H
|
||
|
||
#include <GLM/glm.hpp>
|
||
#include <vector>
|
||
|
||
#include "Model.h"
|
||
#include "Camera.h"
|
||
|
||
// Максимальное число источников света
|
||
#define MAX_LIGHTS 64
|
||
|
||
// Класс лампочки (точечный источник с возможностью отладочного вывода)
|
||
class Bulb
|
||
{
|
||
public:
|
||
Bulb(const glm::vec3 &pos = glm::vec3(0.0f, 0.0f, 0.0f), const glm::vec3 &color = glm::vec3(0.0f, 0.0f, 0.0f), float radius = 10.0f, float angle = 180, const glm::vec3 &direction = glm::vec3(0,0,1)); // Конструктор с координатами, цветом, радиусом и направлением
|
||
|
||
void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Отрисовка отладочной лампы и сферы
|
||
|
||
alignas(16) glm::vec3 position; // Позиция
|
||
alignas(16) glm::vec3 color; // Цвет
|
||
void setRadius(float radius); // Задание радиуса и расчет коэф. угасания
|
||
float angle; // Угол освещенности
|
||
alignas(16) glm::vec3 direction; // Направление для прожектора
|
||
void recalc_pov(); // Пересчитывает матрицы проекции и трансформации в пространство источника
|
||
private:
|
||
float radius; // Радиус действия источника
|
||
alignas(16) glm::vec2 K; // линейный и квадратичный компоненты затухания
|
||
alignas(16) glm::mat4 vp[6]; // Матрицы проекции и трансформации в пространство источника
|
||
static GrouptedModel bulb_model;
|
||
};
|
||
|
||
// Класс направленного источника освещения
|
||
class Sun
|
||
{
|
||
public:
|
||
Sun(const glm::vec3 &direction = glm::vec3(0.0f, 1.0f, 0.0f), const glm::vec3 &color = glm::vec3(0.4f, 0.4f, 0.4f));
|
||
alignas(16) glm::vec3 direction; // Направление лучей на источник
|
||
alignas(16) glm::vec3 color; // Цвет
|
||
void upload(ShaderProgram &shaderProgram); // Загрузка данных об источнике на шейдер
|
||
void pov(ShaderProgram &shaderProgram, Camera camera); // Загружает матрицу проекции и трансформации в пространство источника
|
||
};
|
||
|
||
#endif // LIGHTS_H
|