четверг, 12 июня 2008 г.

Начало сессии

В общем, кто не в курсе я учусь на программиста ;) поэтому наконец решила выложить 2 семестровых (или курсача), в общем не знаю, как это назвать, но решила выложить :) всё остальное под катом!
Кстати, завтра уезжаю на Ильменский фестиваль на 3 дня. Приеду, привезу фотки или просто впечатления и буду делиться ;)

Первая работа попроще. Консольная змейка.
игра
отчёт
структура в виде html
Задание:
Описание задачи

Игровое поле состоит из NхM ячеек (числа N<20 и M<40 задаются в настройках игры). В некоторых ячейках время от времени появляются мышата. При запуске новой игры в выбранной случайным образом ячейке появляется маленькая змейка. Игрок может указывать змейке, в какую сторону ей передвигаться, целью игрока является «съесть» максимальное количество мышат, при этом «съев» каждого нового мышонка змейка удлиняется на одну ячейку. Змейка умирает, если она «съедает» какую-нибудь часть своего тела, или врезается в край поля. Игрок выигрывает когда змейка достигает своей максимальной длины. В настройках игры указываются длина и ширина поля, максимальная длина змейка и скорость, с которой двигается змейка.

Функциональные требования:

1. Программа должна визуализировать игровое поле и происходящие на нем изменения.
2. По ходу игры программа должна вести протокол игры, в который будут заноситься информационные сообщения о сделанных ходах.


Вторая работа. Сначала работа, а потом задание.
игра
Большое и длинное задание(кому не влом читать), как оно было первоначально:

Цель задания


Цель задания - получение навыков работы с трёхмерными динамическими данными, моделирование законов динамики твёрдых тел, использование приемов работы с OpenGL для увеличения реалистичности интерактивной визуализации сцены.

Требуется создать заданную игровую анимированную трёхмерную сцену средствами OpenGL.
Базовая часть задания

В сцене находится площадка, на которой в случайном порядке разбросаны различные объекты. Рядом с площадкой находится бульдозер. Задача бульдозера - сбросить все объекты по очереди в яму, расположенную рядом с площадкой.


Более подробно об обязательных объектах сцены:


* Площадка. Представляет собой квадратную поверхность размера 15x15 условных единиц, расположенную в плоскости y=0.
* Набор объектов на площадке. . Объекты представляют собой кубы, сферы или равносторонние пирамиды размером ~1 условная единица (длина максимального ребра или диаметр для сферы). До нажатия клавиши "пробел" на площадке объектов нет. По нажатии пользователем этой клавиши объекты случайным образом создаются на высоте 5-10 единиц и падают на площадку под воздействием сил гравитации. Объекты должны создаваться в разной ориентации (за исключением сфер).
* Бульдозер. Представляет собой параллелепипед размером около 3x1x1 условные единицы, с узкой стороны к которому приделан вертикальный "ковш" в виде буквы "П", причем внутренняя ширина ковша должна быть такой, чтобы захватывать не более двух объектов (т.е. от 1,5 до 2х единиц). Длина выступающих стенок ковша должна быть не более 0,5 единицы (возможна также реализация без выступающих частей). Бульдозер может двигаться вперед и назад (перпендикулярно "рабочей" плоскости ковша), либо плавно поворачиваться на месте на произвольный угол. Скорость движения бульдозера должна быть разумной (порядка 1 - 2 единица в секунду для движения и около 50-90 градусов в секунду для поворота). Форма самого бульдозера не очень важна, но для ковша желательна простая форма для упрощения работы с физическим движком.
* Яма Яма расположена рядом с площадкой как показано на рисунке. Размер ямы 5x5 единиц, глубина ямы около 10-ти единиц.


Анимация решения задачи должна происходить следующим образом:


* По нажатию клавиши "пробел" падают объекты и начинает двигаться бульдозер.
* Бульдозер двигается в соответствии с правилами своего движения по алгоритму, который должен приводить к тому, что он "заталкивает" ковшом объекты по очереди в яму (разработка такого алгоритма является частью задания, не требуется особая оптимальность алгоритма по времени, однако крайне желательно, чтобы бульдозер заканчивал работу не болеее чем за минуту-две). Внимание: не допускается нарушение бульдозером правил движения (например, перемещение бульдозера на исходную позицию) и падение бульдозера в яму.
* Объект считается упавшим в яму если его центр масс находится ниже уровня y=0 (после этого объекты можно удалять либо оставлять в яме).
* Анимация начинается заново в случае если все объекты находятся в яме либо пользователь нажал "пробел" повторно.
* Все объекты должна двигаться плавно, без рывков.


Требования к реализации:


* Все тела в игре должны реалистично анимироваться под действием физических сил с корректным учетом столкновений. Для реализации физики советуем вам использовать физическую библиотеку Tokamak (на сайте http://www.tokamakphysics.com/ ), так как она наиболее проста в использовании, и к тому же является бесплатной. Подробнее об использовании библиотеки можно прочесть здесь, либо в документации, которая входит в состав библиотеки.
* В сцене должно быть не менее семи объектов для сбора.
* Бульдозер можно считать бесконечно тяжелым, поэтому его траектория может не меняться при столкновении с объектами (если реализовано изменение и коррекция траектории, это будет оценено дополнительными баллами)
* В сцене должен присутствовать источник света.
* Каждому объекту должен быть назначен материал.
* В сцене обязательно должны присутствовать невырожденные текстуры как минимум на площадке.
* Сцена должна визуализироваться в перспективной проекции таким образом, чтобы было видно всю площадку и яму целиком.

За реализацию базовых требований ставится 11 баллов.
Дополнительная часть задания

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

* Применение объектов нетривиальной формы, не сводящихся к комбинации примитивов типа куб, сфера и т.п. Для всех таких объектов обязателен корректный расчет взаимодействий с другими объектами, бульдозером, площадкой, ямой.
* Зеркальная площадка. Отражения в площадке (для плоской площадки)
* Зеркало на бульдозере. Зеркало на ковше или одной из сторон бульдозера.
* Сферическое текстурирование на бульдозере. Применение реалистичной сферической текстуры на бульдозере.
* Тени на площадке. Тени от объектов и бульдозера на площадку.
* Тени на площадке и объектах. Тени, отбрасываемые объектам друг на друга и на площадку (алгоритмы shadow volumes, shadow mapping и т.п.)
* Мягкие тени.
* Режим с ручным управлением бульдозером с клавиатуры. Обратите внимание на интуитивность управления - крайне желательно использовать клавиши "вверх", "вниз" для движения вперед и назад, а клавиши "влево" и "вправо" для поворота влево и вправо, соответственно.
* Управление камерой с помощью клавиатуры/мыши.
* Реалистичность геометрии моделей. Можно усложнять модель бульдозера, наносить реалистичные текстуры и т.п., оценивается общее впечатление от работы.
* Усложненное физическое моделирование - +2 балла. Можно добавлять различные объекты или усложнять форму ковша и т.п., пользуясь продвинутыми возможностями библиотек физического моделирования (но не забывайте, что основной целью задания являются алгоритмы визуализации)
* Площадка сложной формы (по высоте) - +3-4 балла. Площадка с изменением поверхности ("холмы") по высоте с корректным физическим моделированием.


Материалы для выполнения задания


Для изучения возможностей Tokamak предлагаются следующие материалы:

* Официальная страница Tokamak.
* Дополнительные статьи по физике.
* Статья о более корректной реализации таймера.
* Урок по Tokamak на русском языке.

Для изучения возможностей OpenGL предлагаются следующие материалы

* Ю. Баяковский, А. Игнатенко, А. Фролов. Графическая библиотека OpenGL.Учебно-методическое пособие.
* Обучающая программа для изучение свойств команд OpenGL
* Простые примеры, использующие OpenGL.

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

Стандартная библиотека GL и библиотека GLU, как правило, входит в поставку среды программирования. Библиотеку GLUT (версия для Microsoft Visual C++) можно скачать здесь.
Дополнительную информацию о библиотеке GLUT можно найти в разделе GLUT на сайте www.opengl.org

Требования к программе


Обязательное требование - выполнить обязательную часть задания. При этом программа должна работать в интерактивном режиме, т.е. допускается время ожидания перерисовки не более 2-3 секунд на современной машине с ускорителем графики.

Еще одно обязательное требование - разбираться в материале. В спорных ситуациях оценка выставляется после личной беседы, выявляющей понимание принципа действия основных алгоритмов.

К программе должны прилагаться все необходимые для ее запуска библиотеки (опускать можно только слишком большие библиотеки, если они явлются стандартными).
Оценка

* Обязательная часть задания - 11 баллов.
* Объекты нетривиальной формы - +2 балла.
* Зеркальная площадка - +1 балл
* Зеркало на бульдозере - +3 балла.
* Сферическое текстурирование на бульдозере - +1 балл.
* Тени на площадке - +1 балл.
* Тени на площадке и объектах - +3 балла.
* Мягкие тени - +2 балла.
* Режим с ручным управлением бульдозером с клавиатуры/мыши - +3 балла.
* Управление камерой с помощью клавиатуры/мыши - +1-2 балла.
* Реалистичность геометрии моделей - +2 балла.
* Усложненное физическое моделирование - +2 балла.
* Площадка сложной формы (по высоте) - +3-4 балла.

Примечания:


* Решение задачи сбора объектов в яму являются обязательной частью задания, поэтому при ее невыполнении работа не будет засчитана (0 баллов).
* Баллы за базу могут быть снижены (до 4-х), если объекты в сцене не выглядят реалистично, неверно выставлено освещение и т.п.

Автор задания: Алексей Игнатенко. ВМК МГУ.
Авторы идеи: Артем Семенов, Ольга Сенюкова

4 комментария:

Анонимный комментирует...

А, собственно, где же исходники?%)

Ещё окажется, что программа написана на Хаскелле.%)

shellma комментирует...

что такое хаскелл? какая из двух? :)
змейка на си, траХтор на дельфях(изучали опенжл).
Ну и зачем тебе исходники?

flurag комментирует...

Хорошие игрухи получились, но есть что доработать. думаю, хороший программер получится из тебя ;)

shellma комментирует...

лень, ибо нафиг никому не нужно. Да и не буду никогда игрушки програмить, не моё это ;)