Начало: 13 ноября 2007 года.
Конец: 27 ноября 2007 года (23:59)
Автор задания: Алексей Игнатенко
Авторы идеи: Артем Семенов, Ольга Сенюкова
Цель задания
Цель задания - получение навыков работы с трёхмерными динамическими данными, моделирование законов динамики твёрдых тел, использование приемов работы с OpenGL для увеличения реалистичности интерактивной визуализации сцены.
Требуется создать заданную игровую анимированную трёхмерную сцену средствами OpenGL.
Базовая часть задания
В сцене находится площадка, на которой в случайном порядке разбросаны различные объекты. Рядом с площадкой находится бульдозер. Задача бульдозера -- сбросить все объекты по очереди в яму, расположенную рядом с площадкой.

Более подробно об обязательных объектах сцены:
- Площадка. Представляет собой квадратную поверхность размера 15x15 условных единиц, расположенную в плоскости y=0.
- Набор объектов на площадке. . Объекты представляют собой кубы, сферы или равносторонние пирамиды размером ~1 условная единица (длина максимального ребра или диаметр для сферы). До нажатия клавиши "пробел" на площадке объектов нет. По нажатии пользователем этой клавиши объекты случайным образом создаются на высоте 5-10 единиц и падают на площадку под воздействием сил гравитации. Объекты должны создаваться в разной ориентации (за исключением сфер).
- Бульдозер. Представляет собой параллелепипед размером около 3x1x1 условные единицы, с узкой стороны к которому приделан вертикальный "ковш" в виде буквы "П", причем внутренняя ширина ковша должна быть такой, чтобы захватывать не более двух объектов (т.е. от 1,5 до 2х единиц). Длина выступающих стенок ковша должна быть не более 0,5 единицы (возможна также реализация без выступающих частей). Бульдозер может двигаться вперед и назад (перпендикулярно "рабочей" плоскости ковша), либо плавно поворачиваться на месте на произвольный угол. Скорость движения бульдозера должна быть разумной (порядка 1 - 2 единица в секунду для движения и около 50-90 градусов в секунду для поворота). Форма самого бульдозера не очень важна, но для ковша желательна простая форма для упрощения работы с физическим движком.
- Яма Яма расположена рядом с площадкой как показано на рисунке. Размер ямы 5x5 единиц, глубина ямы около 10-ти единиц.
Анимация решения задачи должна происходить следующим образом:
- По нажатию клавиши "пробел" падают объекты и начинает двигаться бульдозер.
- Бульдозер двигается в соответствии с правилами своего движения по алгоритму, который должен приводить к тому, что он "заталкивает" ковшом объекты по очереди в яму (разработка такого алгоритма является частью задания, не требуется особая оптимальность алгоритма по времени, однако крайне желательно, чтобы бульдозер заканчивал работу не болеее чем за минуту-две). Внимание: не допускается нарушение бульдозером правил движения (например, перемещение бульдозера на исходную позицию) и падение бульдозера в яму.
- Объект считается упавшим в яму если его центр масс находится ниже уровня y=0 (после этого объекты можно удалять либо оставлять в яме).
- Анимация начинается заново в случае если все объекты находятся в яме либо пользователь нажал "пробел" повторно.
- Все объекты должна двигаться плавно, без рывков.
Требования к реализации:
- Все тела в игре должны реалистично анимироваться под действием физических сил с корректным учетом столкновений. Для реализации физики советуем вам использовать физическую библиотеку Tokamak (архив zip 1.05 MB, либо на сайте http://www.tokamakphysics.com/ ), так как она наиболее проста в использовании, и к тому же является бесплатной. Подробнее об использовании библиотеки можно прочесть здесь, либо в документации, которая входит в состав библиотеки.
- В сцене должно быть не менее семи объектов для сбора.
- Бульдозер можно считать бесконечно тяжелым, поэтому его траектория может не меняться при столкновении с объектами (если реализовано изменение и коррекция траектории, это будет оценено дополнительными баллами)
- В сцене должен присутствовать источник света.
- Каждому объекту должен быть назначен материал.
- В сцене обязательно должны присутствовать невырожденные текстуры как минимум на площадке.
- Сцена должна визуализироваться в перспективной проекции таким образом, чтобы было видно всю площадку и яму целиком.
За реализацию базовых требований ставится 11 баллов.
Дополнительная часть задания
Ниже приведены возможности, за реализацию которых можно получить дополнительные баллы.
- Применение объектов нетривиальной формы, не сводящихся к комбинации примитивов типа куб, сфера и т.п. Для всех таких объектов обязателен корректный расчет взаимодействий с другими объектами, бульдозером, площадкой, ямой.
- Зеркальная площадка. Отражения в площадке (для плоской площадки)
- Зеркало на бульдозере. Зеркало на ковше или одной из сторон бульдозера.
- Сферическое текстурирование на бульдозере. Применение реалистичной сферической текстуры на бульдозере.
- Тени на площадке. Тени от объектов и бульдозера на площадку.
- Тени на площадке и объектах. Тени, отбрасываемые объектам друг на друга и на площадку (алгоритмы shadow volumes, shadow mapping и т.п.)
- Мягкие тени.
- Режим с ручным управлением бульдозером с клавиатуры. Обратите внимание на интуитивность управления - крайне желательно использовать клавиши "вверх", "вниз" для движения вперед и назад, а клавиши "влево" и "вправо" для поворота влево и вправо, соответственно.
- Управление камерой с помощью клавиатуры/мыши.
- Реалистичность геометрии моделей. Можно усложнять модель бульдозера, наносить реалистичные текстуры и т.п., оценивается общее впечатление от работы.
- Усложненное физическое моделирование - +2 балла. Можно добавлять различные объекты или усложнять форму ковша и т.п., пользуясь продвинутыми возможностями библиотек физического моделирования (но не забывайте, что основной целью задания являются алгоритмы визуализации)
- Площадка сложной формы (по высоте) - +3-4 балла. Площадка с изменением поверхности ("холмы") по высоте с корректным физическим моделированием.
Материалы для выполнения задания
Для изучения возможностей Tokamak предлагаются следующие материалы:
Для изучения возможностей OpenGL предлагаются следующие материалы
Для использования основных возможностей OpenGL необходимо иметь реализацию базисной библиотеки, а также библиотек GLU и GLUT, описание которых можно найти в учебном пособии. Там же описывается, как настроить OpenGL в среде программирования.
Стандартная библиотека GL и библиотека GLU, как правило, входит в поставку среды программирования. Библиотеку GLUT (версия для Microsoft Visual C++) можно скачать здесь.
Дополнительную информацию о библиотеке GLUT можно найти в разделе GLUT на сайте www.opengl.org
Требования к программе
Обязательное требование - выполнить обязательную часть задания. При этом программа должна работать в интерактивном режиме, т.е. допускается время ожидания перерисовки не более 2-3 секунд на современной машине с ускорителем графики.
Еще одно обязательное требование - разбираться в материале. В спорных ситуациях оценка выставляется после личной беседы, выявляющей понимание принципа действия основных алгоритмов.
К программе должны прилагаться все необходимые для ее запуска библиотеки (опускать можно только слишком большие библиотеки, если они явлются стандартными). Отсутствие библиотек создает неудобства при проверке, однако не фатально. У нас есть набор из наиболее часто недостающих библиотек для Borland C++ Builder и MS Visual C++.
Примечание: glut32.dll в архив можно не включать.
Оценка
- Обязательная часть задания - 11 баллов.
- Объекты нетривиальной формы - +2 балла.
- Зеркальная площадка - +1 балл
- Зеркало на бульдозере - +3 балла.
- Сферическое текстурирование на бульдозере - +1 балл.
- Тени на площадке - +1 балл.
- Тени на площадке и объектах - +3 балла.
- Мягкие тени - +2 балла.
- Режим с ручным управлением бульдозером с клавиатуры/мыши - +3 балла.
- Управление камерой с помощью клавиатуры/мыши - +1-2 балла.
- Реалистичность геометрии моделей - +2 балла.
- Усложненное физическое моделирование - +2 балла.
- Площадка сложной формы (по высоте) - +3-4 балла.
Примечания:
- Решение задачи сбора объектов в яму являются обязательной частью задания, поэтому при ее невыполнении работа не будет засчитана (0 баллов).
- Баллы за базу могут быть снижены (до 4-х), если объекты в сцене не выглядят реалистично, неверно выставлено освещение и т.п.
Оформление
См. Информацию о курсе и FAQ.
Не забудьте положить в архив файл readme.txt. В файле указать следующие подзадания:
Обязательная часть задания [+]/[-]
Объекты нетривиальной формы [+]/[-]
Зеркальная площадка [+]/[-]
Зеркало на бульдозере [+]/[-]
Сферическое текстурирование на бульдозере [+]/[-]
Тени на площадке [+]/[-]
Тени на площадке и объектах [+]/[-]
Мягкие тени [+]/[-]
Режим с ручным управлением бульдозером с клавиатуры/мыши - [+]/[-]
Управление камерой с помощью клавиатуры/мыши [+]/[-]
Реалистичность геометрии моделей [+]/[-]
Усложненное физическое моделирование [+]/[-]
Площадка сложной формы (по высоте) [+]/[-]
Результаты работы
Результаты смотрите в интернете. Вопросы можно задать в форуме.
Задание выполняется строго индивидуально. Совместная работа или обмен кусками кода, при условии что факт командной работы не был указан в readme.txt, считается плагиатом и оценивается в -5 баллов всем участникам.