Компьютерная графика. Lab4. Создание простых спецэффектов в OpenGL

Задание

Необходимо написать программу, в которой реализуются описанные выше специальные эффекты. Пример того, что должно получиться, — программа lab4api. Исходный код не приводится потому, что в таком случае вам просто нужно было бы заменить функции рисования тора и октаэдра на ваши фигуры.

Как и в лабораторной работе № 3, вам нужно создать сцену с двумя перемещающимися в пространстве фигурами (теми же, что и в 3-й лаб. работе). Только теперь вместо двух прожекторов у вас один точечный источник света. Предоставлять возможность в программе интерактивно менять параметры источников света и камеры нет необходимости. Для того, чтобы тень рисовалась на четырех стенах, а не только на одной, необходимо отдельно рисовать тень на каждой стене. При этом нужно активизировать дополнительные отсекающие плоскости (функции glClipPlane, glEnable(GL_CLIP_PLANE0), …), чтобы рисование тени производилось в пределах стены.

В работе следует использовать только перспективную проекцию.

В целом, последовательность рисования может быть следующей.
1. Нарисовать отраженную от левой стены сцену.
2. Нарисовать прозрачную левую стену.
3. Нарисовать отраженную от правой стены сцену.
4. Нарисовать прозрачную правую стену.
5. Нарисовать оставшуюся стену, пол и потолок.
6. Нарисовать тени последовательно на каждой из трех стен и на полу.
7. Нарисовать обычный вид сцены (две фигуры).
8. Нарисовать источник света.

Для рисования отраженных сцен нужно изменить положение источника света и произвести необходимую трансляцию системы координат, после чего задать масштабирование в виде

Порядок обхода нужно заменить на «по часовой стрелке». Прозрачные стены нужно рисовать при выключенном освещении. Из-за этого, правда, сцена теряет реалистичность. Плюс тому, кто сможет придумать выход из положения. Источник света (то есть окружающая его сфера) тоже рисуется при выключенном освещении. В каталоге Common содержатся заголовочные файлы и исходные тексты, в том числе для использования библиотеки glTools. Файл glext.h позволяет использовать функции OpenGL версий 1.2 и более.

Заголовочные файлы от Microsoft содержат описание функций OpenGL 1.1. Таким образом, вы можете использовать заголовочный файл OpenGLSB.h вместо glut.h.

Чтобы использовать функцию gltMakeShadowMatrix, включите в состав своего проекта файлы MatrixMath.c и VectorMath.c. Добавьте заголовочный файл GLTools.h. Не забудьте для файлов *.c задать свойство (Properties) С/C++—>Advanced—>Compile As – Compile as C++ code (/TP).

Также нужно будет в свойствах проекта указать, что не нужно использовать Precompiled Headers.

Текст функции прорисовки:

Вывод:

Отражение, которое получается при рисовании прозрачной стену и прорисовки всей сцены за ней очень некачественное. Тень, получаемая с помощью рисования объекта на двумерной плоскости, на которой её нужно нарисовать выглядит достаточно правдоподобно.

Скачать ZIP-архив с исходными кодами

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *