Плоскость для теней
This commit is contained in:
parent
8160e6bb34
commit
4b75335480
39
src/main.cpp
39
src/main.cpp
|
@ -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();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue