Начало: 3
апреля Конец: 17 апреля
Автор задания: Алексей
Игнатенко
Цель задания
Целью задания является получение навыков работы с трехмерной
графикой путем создание изображения заданной
трехмерной сцены средствами OpenGL API.
Описание задания
Введение
Требуется создать средствами OpenGL статическое или анимирование изображение
трехмерной комнаты, в которой находятся различные объекты, источники света и
камера. В простейшем случае предлагается реализовать изображение одного из
вариантов классической тестовой сцены Cornell Box. Студенты, заинтересованные в
получении более высокой оценки могут проявить фантазию и сделать модель
некоторой воображаемой или реально существующей комнаты.
Обязательная часть
Требуется создать изображение сцены Cornell Box. Сцена представляет из себя
комнату кубического вида с отсутствующей передней стенкой. В комнате находятся
геометрические предметы различных форм и свойств, и источник света на боковой
стенке. Присутствует также камера с заданными параметрами. На рисунке показан
один из вариантов предлагаемой сцены. (картинка получена методом трассировки
лучей)
Описание геометрии можно найти здесь в формате файла 3D
Studio. Если вы не умеете работать с этим форматом - задайте похожую геометрию сами. Реализации этой сцены достаточно для выполнения задания. Приветствуется использование
примитивов библиотек GLUT и GLU. Внимание! Сцена не должна
превращаться в набор разнородных предметов. Протяженный источник света
на стене комнаты можно эмулировать несколькими точечными источниками. Эстетичность и
оригинальность выполненного задания принимается во внимание.
Ниже приведены возможности, за реализацию которых можно получить
дополнительные баллы.
Реалистичность сцены можно значительно повысить за счет разбиение полигонов.
Суть этого в том, что модели освещение OpenGL освещенность вычисляется в
вершинах полигона с учетом направления нормалей в этих вершинах, а затем линейно
интерполируется по всех поверхности. Если используются большие полигоны,
то, очевидно, невозможно получить действительно плавные переходы и
затенения. Для преодоления этого недостатка можно разбивать большие грани
(стены, например) на множество более малых по размерам. Соответственно разброс в
направлении нормалей в вершинах одного полигона не будет столь велик и затенение
станет более плавным.
Наложение текстур на объекты сцены поощряется дополнительными баллами.
Дополнительными баллами оценивается присутствие в сцене теней. Один из
простейших алгоритмов наложения теней приведен в учебном пособии (см.
ниже). Использование более продвинутых алгоритмов ( в т.ч. shadow volumes -
обратите внимание!) будет оценено дополнительными баллами.
Реализация устранения ступенчатости (antialiasing) методом, предложенным в
пособии или каким-либо другим также оценивается.
За введение в сцену прозрачных объектов дается 1 балл. Механизм работы с
прозрачным объектами описан в учебном пособии.
Также предлагается ввести в комнату несколько зеркальных объектов. Например,
пол, потолок или одну из стен можно сделать зеркалами или повесить зеркало на
одну из стен. Вариант с размещение зеркала внутри комнаты более сложен в
реализации и за него даются дополнительные баллы.
Дополнительная часть
Дополнительная часть предполагает реализацию модели произвольной комнаты, со
следующими ограничениями:
- форма комнаты должна быть такой же, как в
обязательной части, т.е. в виде параллелепипеда без передней стенки.
- в комнате обязательно должен находиться источник света. Единственное
исключение: солнечный свет из окна или двери.
Общее правило такое: чем более реаличная сцена, тем больше баллов можно за нее получить. Поощряется использование текстур, теней,
устранения ступенчатости, зеркал. Дополнительно может быть сделана навигация
по комнате.
Материалы для выполнения задания
Для изучения возможностей OpenGL предлагаются следующие материалы
Для использования основных возможностей OpenGL необходимо иметь
реализацию базисной библиотеки, а также библиотек GLU и GLUT, описание которых
можно найти в учебном пособии. Там же
описывается, как получить совместимый с BorlandC++ *.lib файл. Расположение
файлов: С расширением '.h': каталог ..\YourCompiler\Include\Gl
или каталог с текстом
программы. С расширением '.lib': каталог ..\YourCompiler\Lib или каталог с
текстом программы. С расширением '.dll': каталог ..\Windows\System или
каталог с исполняемым файлом
программы ( для VisualC++ это каталог YourProject\Debug или
YourProject\Release).
Базисная библиотека Описывается в файлах gl.h, opengl32.lib,
opengl32.dll, которые обычно входят состав компилятора и ОС Windows и находятся
в перечисленных каталогах.Если их там нет, можно взять эти файлы отсюда (299Kb). Отдельно файл
opengl32.lib можно взять здесь
(11Kb).
Библиотека GLU Описывается в файлах glu.h, glu32.lib, glu32.dll,
которые обычно входят состав компилятора и ОС Windows и находятся в
перечисленных каталогах. Если их там нет, можно взять эти файлы отсюда (62Kb).Отдельно файл glu32.lib можно
взять здесь
(2Kb).
Библиотека GLUT Описывается в файлах glut.h, glut32.lib,
glut32.dll. Если Вы используете компилятор VisualC++, то совместимые с ним
версии этих файлов можно взять отсюда
(71Kb). Пользователи BorlandC++ могут использовать файлы отсюда (69Kb). Отдельно файл glut32.lib
можно взять здесь (5Kb).
Библиотека GLAUX Описывается в файлах glaux.h, glaux.lib. Эти
файлы можно получить отсюда(142Kb).
Внимание: использование библиотеки GLAUX не рекомендуется, однако баллов за ее
использование сниматься не будет.
Все файлы. Архив сразу со всеми вышеперечисленными файлами можно
взять отсюда (571Kb).
Требования к программе
Обязательное требование - выполнить обязательную часть задания. При этом
программа должна работать в интерактивном режиме, т.е. допускается время
ожидания перерисовки не более 4-6 секунд на современной машине (без ускорителя
графики -- если вам требуется ускоритель, описывайте это отдельно в readme.txt).
Еще одно обязательное требование - разбираться в материале.
В спорных ситуациях оценка выставляется после личной беседы, выявляющей
понимание принципа действия основных алгоритмов.
Оценка
Обязательная часть задания
(Cornell Box, только освещение) |
6 баллов
|
Реализация
произвольной комнаты |
до +5 баллов
|
Разбиение полигонов |
1 балл
|
Использование текстур |
2 балла
|
Наложение теней |
2 балла
|
Устранение ступенчатости |
2 балла |
Использование прозрачных
объектов |
1 балл |
Зеркальные объекты |
3-5
баллов |
ZIP-архив с исходными текстами и исполняемыми файлами, названный по схеме
NMaaa_b.zip (где N-номер задания, M - номер группы, aaa - три первые латинские
буквы фамилии, b - первая латинская буква имени) присылайте на assign4@graphics.cs.msu.su
Также смотрите здесь, какие файлы
нам присылать и как их оформить Советуем прочитать FAQ
Если из меню вашей программы не сразу становится очевидно, какие обязательные
и дополнительные возможности реализованы в программе, то в README-файле нужно
явно это указать.
Результаты смотрите в интернете или на стенде около комнаты 703. Все
вопросы присылать автору.
Примечания
- Задание выполняется строго индивидуально. За совместную работу или обмен
кусками кода ставится ноль баллов всем участникам, если факт командной
работы не был указан в readme.txt заданий.
- Не забывайте правильно оформлять исходный код ваших
работ
|