diff --git a/include/Lights.h b/include/Lights.h index 12f4cfc..b7b60e7 100644 --- a/include/Lights.h +++ b/include/Lights.h @@ -27,6 +27,8 @@ class Light : public Node const glm::vec3& c_color() const; // Константный доступ к цвету glm::vec3& e_color(); // Неконстантная ссылка для изменений цвета + + static void render(ShaderProgram &shaderProgram, UBO &material_buffer); // Рисование отладочных лампочек private: Light(); // Конструктор без параметров Light(const Light& copy) = delete; // Конструктор копирования ОТКЛЮЧЕН diff --git a/src/Lights.cpp b/src/Lights.cpp index 9451d08..ae43075 100644 --- a/src/Lights.cpp +++ b/src/Lights.cpp @@ -1,5 +1,7 @@ #include "Lights.h" +#include "Scene.h" // Для отладочного вывода лампочек + #include GLuint Light::count = 0; // количество используемых источников (должно быть <= MAX_LIGHTS) @@ -165,3 +167,22 @@ Light::~Light() { } + +// Рисование отладочных лампочек +void Light::render(ShaderProgram &shaderProgram, UBO &material_buffer) +{ + // Загрузка модели лампочки при первом вызове функции + static Scene bulb = loadOBJtoScene("../resources/models/bulb.obj", "../resources/models/", "../resources/textures/"); + + // Цикл по источникам света + for (int i = 0; i < count; i++) + { + // Сдвиг на позицию источника + bulb.root.e_position() = data[i].position; + // Задание цвета + bulb.models.begin()->material.ka = data[i].color; + + // Вызов отрисовки + bulb.render(shaderProgram, material_buffer); + } +} diff --git a/src/main.cpp b/src/main.cpp index 179744b..f0e2a87 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -154,6 +154,13 @@ int main(void) Model quadModel; quadModel.load_verteces(quadVertices, 4); quadModel.load_indices(quadIndices, 6); + + // Шейдер для рисования отладочных лампочек + ShaderProgram bulbShader; + // Загрузка и компиляция шейдеров + bulbShader.load(GL_VERTEX_SHADER, "shaders/bulb.vert"); + bulbShader.load(GL_FRAGMENT_SHADER, "shaders/bulb.frag"); + bulbShader.link(); // Пока не произойдет событие запроса закрытия окна while(!glfwWindowShouldClose(window)) @@ -187,6 +194,17 @@ int main(void) // Рендерим прямоугольник с расчетом освещения quadModel.render(); + // Перенос буфера глубины + FBO::useDefault(GL_DRAW_FRAMEBUFFER); // Базовый в режиме записи + gbuffer.use(GL_READ_FRAMEBUFFER); // Буфер геометрии в режиме чтения + // Копирование значений глубины + glBlitFramebuffer(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, GL_DEPTH_BUFFER_BIT, GL_NEAREST); + FBO::useDefault(); // Использование базового буфера для дальнейших работ + + // Отрисовка отладочных лампочек со специальным шейдером + bulbShader.use(); + Light::render(bulbShader, material_data); + // Представление содержимого буфера цепочки показа на окно glfwSwapBuffers(window); // Обработка системных событий