Плоскость для теней

This commit is contained in:
parent 8160e6bb34
commit 4b75335480
1 changed files with 39 additions and 0 deletions

View File

@ -209,6 +209,41 @@ int main(void)
sunShadowShader.load(GL_VERTEX_SHADER, "shaders/sun_shadow.vert"); sunShadowShader.load(GL_VERTEX_SHADER, "shaders/sun_shadow.vert");
sunShadowShader.link(); sunShadowShader.link();
// Модель прямоугольника
Model rectangle;
// Вершины прямоугольника
glm::vec3 rectangle_verticies[] = { {-0.5f, 0.0f, -0.5f}
, { 0.5f, 0.0f, -0.5f}
, { 0.5f, 0.0f, 0.5f}
, {-0.5f, 0.0f, 0.5f}
};
// Загрузка вершин модели
rectangle.load_verteces(rectangle_verticies, sizeof(rectangle_verticies)/sizeof(glm::vec3));
// индексы вершин
GLuint rectangle_indices[] = {0, 1, 2, 2, 3, 0};
// Загрузка индексов модели
rectangle.load_indices(rectangle_indices, sizeof(rectangle_indices)/sizeof(GLuint));
// Нормали
glm::vec3 rectangle_normals[] = { {0.0f, 1.0f, 0.0f}
, {0.0f, 1.0f, 0.0f}
, {0.0f, 1.0f, 0.0f}
, {0.0f, 1.0f, 0.0f}
};
// Загрузка нормалей модели
rectangle.load_normals(rectangle_normals, sizeof(rectangle_normals)/sizeof(glm::vec3));
// Зададим горизонтальное положение перед камерой
rectangle.e_position().y = -1;
rectangle.e_position().z = 2;
rectangle.e_scale() = glm::vec3(4);
// Параметры материала
rectangle.material.ka = {0.4, 0.4, 0.4};
rectangle.material.kd = {0.4, 0.4, 0.4};
// Шейдер для рисования отладочных лампочек // Шейдер для рисования отладочных лампочек
ShaderProgram bulbShader; ShaderProgram bulbShader;
// Загрузка и компиляция шейдеров // Загрузка и компиляция шейдеров
@ -235,6 +270,7 @@ int main(void)
// Тут производится рендер // Тут производится рендер
scene.render(gShader, material_data); scene.render(gShader, material_data);
rectangle.render(gShader, material_data);
// Изменим размер вывода для тени // Изменим размер вывода для тени
glViewport(0, 0, sunShadow_resolution, sunShadow_resolution); glViewport(0, 0, sunShadow_resolution, sunShadow_resolution);
@ -246,6 +282,7 @@ int main(void)
glClear(GL_DEPTH_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT);
// Рендерим геометрию в буфер глубины // Рендерим геометрию в буфер глубины
scene.render(sunShadowShader, material_data); scene.render(sunShadowShader, material_data);
rectangle.render(sunShadowShader, material_data);
// Изменим размер вывода для окна // Изменим размер вывода для окна
glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
@ -260,6 +297,8 @@ int main(void)
gNormal.use(); gNormal.use();
gDiffuseP.use(); gDiffuseP.use();
gAmbientSpecular.use(); gAmbientSpecular.use();
// Подключаем текстуры теней
sunShadowDepth.use();
// Рендерим прямоугольник с расчетом освещения // Рендерим прямоугольник с расчетом освещения
quadModel.render(); quadModel.render();