Буфер рендера теней
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_FRAGMENT_SHADER, "shaders/lighting.frag");
|
||||
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*));
|
||||
|
||||
glm::vec3 quadVertices[] = { {-1.0f, 1.0f, 0.0f}
|
||||
|
@ -191,6 +191,24 @@ int main(void)
|
|||
quadModel.load_verteces(quadVertices, 4);
|
||||
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;
|
||||
// Загрузка и компиляция шейдеров
|
||||
|
@ -218,6 +236,19 @@ int main(void)
|
|||
// Тут производится рендер
|
||||
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();
|
||||
// Подключаем шейдер для прямоугольника
|
||||
|
|
Loading…
Reference in New Issue