17/include/Lights.h
2023-07-05 15:10:39 +03:00

58 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef LIGHTS_H
#define LIGHTS_H
#include <GLM/glm.hpp>
#include <vector>
#include "Model.h"
#include "Camera.h"
// Максимальное число источников света
#define MAX_LIGHTS 64
// Максимальное число образцов для SSAO
#define MAX_SSAO 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); // Загружает матрицу проекции и трансформации в пространство источника
};
// Данные для SSAO
struct SSAO_data
{
float radius = 0.05f;
float bias = 0.025f;
int size = MAX_SSAO;
alignas(16) glm::vec2 scale;
glm::vec3 samples[MAX_SSAO];
};
#endif // LIGHTS_H