Буфер рендера теней
This commit is contained in:
parent
86de8dc102
commit
9d0de5ce0f
33
src/main.cpp
33
src/main.cpp
|
@ -176,7 +176,7 @@ int main(void)
|
||||||
lightShader.load(GL_VERTEX_SHADER, "shaders/quad.vert");
|
lightShader.load(GL_VERTEX_SHADER, "shaders/quad.vert");
|
||||||
lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag");
|
lightShader.load(GL_FRAGMENT_SHADER, "shaders/lighting.frag");
|
||||||
lightShader.link();
|
lightShader.link();
|
||||||
const char* gtextures_shader_names[] = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular"};
|
const char* gtextures_shader_names[] = {"gPosition", "gNormal", "gDiffuseP", "gAmbientSpecular", "sunShadowDepth"};
|
||||||
lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*));
|
lightShader.bindTextures(gtextures_shader_names, sizeof(gtextures_shader_names)/sizeof(const char*));
|
||||||
|
|
||||||
glm::vec3 quadVertices[] = { {-1.0f, 1.0f, 0.0f}
|
glm::vec3 quadVertices[] = { {-1.0f, 1.0f, 0.0f}
|
||||||
|
@ -191,6 +191,24 @@ int main(void)
|
||||||
quadModel.load_verteces(quadVertices, 4);
|
quadModel.load_verteces(quadVertices, 4);
|
||||||
quadModel.load_indices(quadIndices, 6);
|
quadModel.load_indices(quadIndices, 6);
|
||||||
|
|
||||||
|
// Размер текстуры тени от солнца
|
||||||
|
const GLuint sunShadow_resolution = 1024;
|
||||||
|
// Создадим буфер кадра для рендера теней
|
||||||
|
FBO sunShadowBuffer;
|
||||||
|
// Создадим текстуры для буфера кадра
|
||||||
|
Texture sunShadowDepth(sunShadow_resolution, sunShadow_resolution, GL_DEPTH_ATTACHMENT, 4, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT);
|
||||||
|
// Отключим работу с цветом
|
||||||
|
glDrawBuffer(GL_NONE);
|
||||||
|
glReadBuffer(GL_NONE);
|
||||||
|
// Активируем базовый буфер кадра
|
||||||
|
FBO::useDefault();
|
||||||
|
|
||||||
|
// Шейдер для расчета теней
|
||||||
|
ShaderProgram sunShadowShader;
|
||||||
|
// Загрузим шейдер
|
||||||
|
sunShadowShader.load(GL_VERTEX_SHADER, "shaders/sun_shadow.vert");
|
||||||
|
sunShadowShader.link();
|
||||||
|
|
||||||
// Шейдер для рисования отладочных лампочек
|
// Шейдер для рисования отладочных лампочек
|
||||||
ShaderProgram bulbShader;
|
ShaderProgram bulbShader;
|
||||||
// Загрузка и компиляция шейдеров
|
// Загрузка и компиляция шейдеров
|
||||||
|
@ -218,6 +236,19 @@ int main(void)
|
||||||
// Тут производится рендер
|
// Тут производится рендер
|
||||||
scene.render(gShader, material_data);
|
scene.render(gShader, material_data);
|
||||||
|
|
||||||
|
// Изменим размер вывода для тени
|
||||||
|
glViewport(0, 0, sunShadow_resolution, sunShadow_resolution);
|
||||||
|
// Активируем буфер кадра для теней от солнца
|
||||||
|
sunShadowBuffer.use();
|
||||||
|
// Подключим шейдер для расчета теней
|
||||||
|
sunShadowShader.use();
|
||||||
|
// Очистка буфера глубины
|
||||||
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
// Рендерим геометрию в буфер глубины
|
||||||
|
scene.render(sunShadowShader, material_data);
|
||||||
|
|
||||||
|
// Изменим размер вывода для окна
|
||||||
|
glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
|
||||||
// Активируем базовый буфер кадра
|
// Активируем базовый буфер кадра
|
||||||
FBO::useDefault();
|
FBO::useDefault();
|
||||||
// Подключаем шейдер для прямоугольника
|
// Подключаем шейдер для прямоугольника
|
||||||
|
|
Loading…
Reference in New Issue