#ifndef LIGHTS_H #define LIGHTS_H #include #include #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