Расчётно-графическая работа по Компьютерной Графике

Под катом-темы РГР.
Скачать темы заданий РГР в формате MS Word Document можно в Wiki:
http://ps.margtu.ru/wiki/index.php?wakka=HomePage/20082009/3kurs/cg/2008...

Там же необходимо вписать свое имя в выбранную тему РГР

Задания на оценку «отлично»
Вариант 1
Разработать приложение, визуализирующее берег острова, омываемый морем. Должны использоваться вершинные и фрагментные шейдеры на языке GLSL, анимация позиций вершин на центральном процессоре запрещена. Берег можно представить «условно» (без спецэффектов, сложного графического наполнения), особое внимание обратить на море: моделирование волнения на море, прибойной волны, отражений, преломлений в воде. Описать в пояснительной записке выбранный способ визуализации эффекта.

Вариант 2
Разработать приложение, визуализирующее эффект намокания поверхностей в результате попадания на данную поверхность капель жидкости. Требуется использовать GLSL-шейдеры. Рекомендуется обойтись без использования дополнительных графических ресурсов (текстур) для реализации эффекта намокания или использовать по минимуму. Реализация заданием для каждой текстуры другой текстуры с нарисованным намоканием недопустима. Описать в пояснительной записке выбранный способ визуализации эффектов.
Примечание. Не требуется учитывать места попадания капель на намокающую поверхность, считать, что поверхность намокает постепенно, в зависимости от некоторого коэффициента намокания, который изменяется от 0 (дождя нет) до 1 (дождь идет уже давно). Подобный эффект хорошо реализован в Stalker Clear Sky, а у ATI есть демо ToyShop и whitepaper Natalya Tatarchuk, описывающая данный эффект.
http://ati.amd.com/developer/eurographics/ToyShop-Eurographics_AnimationFestival.pdf
http://www.youtube.com/watch?v=LtxvpS5AYHQ

Вариант 3
На основе библиотеки с открытым кодом Cal3D версии 0.11 и примеров к ней разработать приложение, визуализирующее множество (100-500) объектов со скелетной анимацией. На каждую вершину скелета оказывает влияние до 4 костей скелета (с различными весовыми коэффициентами). Объекты движутся не синхронно, есть различия в выполняемых движениях и времени начала выполнения движения. Скелетная анимация должна рассчитываться с помощью шейдеров на языке GLSL.
Примечание. В библиотеке Cal3D есть специальный класс, ориентированный на генерацию информации для расчета скелетной анимации на шейдерах.

Вариант 4
Разработать приложение, визуализирующее некоторую 3д сцену, полную объектов реального мира, на которой помимо прочего расположены множество фонарей, так, чтобы одновременно в кадр попадали сотни фонарей. Каждый из фонарей светит, образуя световое пятно около фонаря. Пользователь передвигает по 3д сцене кубик и свет от фонаря воздействует на кубик. Предоставить возможность с помощью нажатия кнопок + и — выключать и включать источники света, регулируя их общее количество. Приложение должно показывать текущий FPS (обновляется раз в секунду) и текущее количество включенных фонарей в заголовке окна приложения. Описать в пояснительной записке выбранный способ реализации источников света.
Примечание: существует как минимум два интересных решения проблемы множества источников света. Один из подходов называется Deferred Shading, а другой заключается в попытке эмулировать воздействие источников света вариацией на тему стенсильного света, аналогичного стенсильным (stencil) теням.

Вариант 5
Разработать приложение, которое осуществляет визуализацию трехмерной сцены, содержащей до 4 движущихся источников света и 15-20 движущихся трехмерных объектов сложной формы. Поверхность объектов детализована текстурой, а также микрорельефом (bump map). Объекты освещены при помощи попиксельного освещения, имеющего диффузную и зеркальную составляющую, и отбрасывают друг на друга и на статические объекты сцены тени, визуализируемые при помощи технологии Stencil Shadow Volumes.
Попиксельное освещение с микрорельефом должно рассчитываться с использованием фрагментных GLSL-шейдеров. Построение теневых объемов производится с использованием вершинных GLSL-шейдеров без участия центрального процессора.

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

Вариант 7
Разработать приложение, визуализирующее в реальном времени процесс взаимодействия находящихся в невесомости капелек жидкости друг с другом. Поверхность капелек жидкости представляет собой изоповерхность в скалярном поле, геометрия которой может быть построена при помощи технологии Marching Cubes или ее альтернативами. В капельках жидкости отражается и преломляется окружающая среда (используйте GLSL-шейдеры и кубические карты текстур для создания данного эффекта).

Вариант 8
Разработайте приложение, в интерактивном режиме визуализирующее трехмерную модель современного автомобиля, движущегося по городу. Пользователь может вращать камеру вокруг автомобиля, приближаться и удаляться от него. Материал кузова автомобиля выполнен с использованием технологии car paint, реализованной на GLSL. Стекла автомобиля – полупрозрачные. Кузов и стекла автомобиля отражают окружающую среду (динамически меняющуюся при движении автомобиля). Находящиеся в фокусе участки сцены (автомобиль) визуализированы четко, в то время как отдаленные (город) – размыты – используется технология Depth of Field для создания данного эффекта.

Вариант 9
Разработать приложение, визуализирующее в интерактивном режиме анимационный ролик на тему Космическая битва. Несколько космических кораблей участвуют в космическом сражении вблизи планеты Земля.
Объекты сцены: Солнце, Земля, Луна, 4-5 космических кораблей, ведущих перестрелку, звездное небо
Реализованные эффекты:

  • Lens Flare (блики от линз)
  • Попиксельное освещение планет и космических кораблей
  • Взрывы
  • Следы выхлопа ракет
  • Звуковые эффекты

Вариант 10
Разработать приложение, визуализирующее в интерактивном режиме трехмерный ландшафт, состоящий из большого количества полигонов (порядка 100 миллионов треугольников). Для визуализации в реальном времени необходимо использовать следующие технологии:

  • Представление ландшафта в виде Quad-tree для отсечения невидимых частей ландшафта
  • Применение нескольких уровней детализации для участков ландшафта в зависимости от расстояния до наблюдателя – при этом необходимо следить за тем, чтобы не было видно стыков блоков карты, имеющих различные уровни детализации
  • Хранение часто используемых фрагментов ландшафта на стороне видеокарты с использованием расширения Vertex Buffer Object и динамическая загрузка новых данных ландшафта

Задания на оценку «хорошо»
Вариант 1
Разработать приложение-проигрыватель систем частиц, проигрывающее системы частиц, заданные параметрами систем частиц и путями к ресурсам в XML(или INI)-файле (приложение получает имя XML(или INI)-файла из командной строки). Анимация вершин должна рассчитываться с помощью GLSL-шейдеров, должно использоваться расширение ARB_point_sprite (каждая частица должна быть представлена ровно одним спрайтом и соответственно одной вершиной). Предоставить вместе с приложением примеры XML-файлов для систем частиц «огонь», «фонтан», «дым». Системы частиц реализовать в виде отдельной библиотеки.

Вариант 2
Разработать приложение, реализующее виртуальную доску, на которой проигрывается AVI-видеофайл, заданный в командной строке. Найти оптимальный метод с точки зрения скорости для поддержки видеотекстур (распаковка видеопотока, перемещение кадра в видеопамять и т.д.), доказать его оптимальность (предоставить сравнение с другими возможными методами), представить описание оптимального метода в виде пояснительной записке. Поддержку видеотекстур реализовать в виде отдельной библиотеки.
Примечание: у NeHe есть урок на эту тему.

Вариант 3-a
Реализовать в RenderMonkey или в любой другой IDE для разработки шейдеров GLSL-шейдер для освещения по модели Кука-Торренса. Продемонстрировать работу шейдера на объекте из материала, для которого данная модель подходит более всего.

Вариант 3-b
Реализовать в RenderMonkey или в любой другой IDE для разработки шейдеров GLSL-шейдер для освещения по модели Орен-Науэра. Продемонстрировать работу шейдера на объекте из материала, для которого данная модель подходит более всего.
http://en.wikipedia.org/wiki/Cook-Torrance#Cook.E2.80.93Torrance_model
http://en.wikipedia.org/wiki/Oren-Nayar_diffuse_model

Вариант 4
Разработать приложение, выполняющее интерактивную визуализацию трехмерной сцены, содержащей несколько движущихся трехмерных текстурированных объектов и 1 движущийся источник освещения. Объекты отбрасывают друг на друга и на статические объекты сцены тени, визуализируемые при помощи технологии Stencil Shadow volumes. Построение теней возможно как при помощи CPU, так и при помощи GPU.

Вариант 5
Разработать приложение, выполняющее интерактивную визуализацию трехмерного города большой размерности. Город состоит из порядка 10 тысяч домов (20-30 различных типов). Примените наиболее подходящие методы оптимизации для визуализации города в интерактивном режиме.

Вариант 6
Разработать приложение, выполняющее интерактивную визуализацию трехмерной модели солнечной системы (солнце, планеты, луна, кометы). Планеты освещаются Солнцем (тени друг на друга не отбрасываются). Применяется эффект Lens Flare, создающий эффект бликов от солнца на объективе камеры. При нажатии клавиш 1-9 происходит перелет виртуальной камеры к одной из 9 планет, при нажатии на 0 происходит перелет к Солнцу. Модель солнечной системы должна учитывать угол наклона оси вращения планет, а также плоскости орбит. При помощи мыши и клавиатуры можно управлять положением и направлением взгляда виртуальной камеры.

Вариант 7.
Разработать приложение, выполняющее интерактивную визуализацию трехмерной модели автомобиля, движущегося по замкнутому пространству. При помощи мыши и клавиатуры можно управлять направлением камеры, а также направлением движения и скоростью автомобиля. Камера привязана к некоторой точке, находящейся позади автомобиля (аналогично тому, как это сделано в компьютерных играх).

Вариант 8
Разработать приложение, выполняющее визуализацию работы трехмерной модели четырехцилиндрового V-образного двигателя внутреннего сгорания. Пользователь может включать и выключать режим просмотра внутренних частей двигателя (продольного и поперечного разреза двигателя). В данном режиме программа должна наглядно показывать вспышки топлива в цилиндрах.

Вариант 9
Разработать приложение, выполняющее интерактивную визуализацию трехмерной модели бильярдного стола. Относительные размеры стола, шаров и луз должны соответствовать относительным размерам соответствующих объектов реального мира. Пользователь должен иметь возможность воздействия на один из шаров в то время, когда шары находятся в состоянии покоя, задавая его начальную скорость и направление движения. При движении шары взаимодействуют друг с другом и со стенками стола. При попадании шара в лузу он исчезает. При попадании главного шара в лузу игра считается законченной неудачно. При попадании всех шаров в лузу, кроме главного, игра считается завершенной успешно. На поверхность шаров нанесена текстура (полоски, надписи), что повышает реалистичность при движении шаров – видно, что шары именно катятся, а не скользят по столу
Дополнительные баллы начисляются за реализацию звукового сопровождения - при столкновении шаров со стенками и друг с другом должны издаваться соответствующие звуки.
Возможно получение отличной оценки за данную работу при реализации попиксельного освещения шаров, а также отбрасывание теней шарами на бильярдный стол (например, при помощи теневых текстур).

Вариант 10
Разработать приложение, визуализирующее трехмерный вариант игры «тетрис». При помощи мыши можно управлять ориентацией камеры, рассматривая игровое поле с разных сторон, а при помощи курсорных клавиш – управлять падающими фигурками. Правила игры – аналогичны правилам двухмерного тетриса.

Вариант 11
Разработать приложение, визуализирующее трехмерный вариант игры «арканоид». Цель игры – разрушить при помощи шарика кирпичную стену. Должны поддерживаться как минимум 3 вида кирпичей (отличающихся прочностью) и 3 вида бонусов. Должны быть реализованы как минимум 3 разных уровня (с возможностью выбора любого из них в меню в начале игры).

Задания на оценку «удовлетворительно»
Вариант 1
Разработать приложение генерирующее с помощью математических алгоритмов следующие текстуры: трава, камень, облака. С помощью сгенерированных текстур собрать и отобразить 3д сцену с травянистой плоскотью, стоунхеджом на ней и облаками, натянутым на сферу. Для генерации каждого вида текстур должен быть реализован класс, удовлетворяющий интерфейсу ITextureGenerator.

Вариант 2
Разработать приложение генерирующее с помощью математических алгоритмов следующие текстуры: кирпичи, асфальт, облака. С помощью сгенерированных текстур собрать и отобразить 3д сцену с плоскотью асфальта, кирпичными строениями на ней и облаками, натянутым на куб. Для генерации каждого вида текстур должен быть реализован класс, удовлетворяющий интерфейсу ITextureGenerator.

Вариант 3
Разработать приложение генерирующее с помощью математических алгоритмов следующие текстуры: деревянная поверхность, каменная поверхность, звездное небо. С помощью сгенерированных текстур собрать и отобразить 3д сцену с каменной плоскостью, кирпичными строениями и звездным небом, натянутым на сферу. Для генерации каждого вида текстур должен быть реализован класс, удовлетворяющий интерфейсу ITextureGenerator.

Вариант 4
Разработать приложение генерирующее с помощью математических алгоритмов следующие текстуры: песок, мрамор, звездное небо. С помощью сгенерированных текстур собрать и отобразить 3д сцену с песчаной плоскостью, мраморными строениями и звездным небом, натянутым на куб. Для генерации каждого вида текстур должен быть реализован класс, удовлетворяющий интерфейсу ITextureGenerator.

Вариант 5
Разработать приложение генерирующее с помощью математических алгоритмов анимационную текстуру каустиков и визуализирующее водную поверхность с каустиками. Генерация кадра текстуры каустиков должна быть реализована отдельным классом.

class ITextureGenerator
{
// установить размеры генерируемой картинки
public void SetSize(int width, int height) = 0;
// сгенерировать картинку
public void Generate() = 0;
// вернуть ссылку на сгенерированную картинку в формате RGB
// или NULL, если она не была сгенерированна
public void* GetImagePointer() = 0;
// освободить выделенную память
public void Free() = 0;
}

Вариант 6
Разработать приложение, визуализирующее в интерактивном режиме трехмерную модель настенных часов со стрелками (без кукушки). Часы показывают текущее время (с точностью до 1 секунды), маятник раскачивается с полупериодом равным 1 с. На корпус часов должна быть нанесена текстура дерева, на циферблат – текстура циферблата.

Вариант 7
Разработать приложение, визуализирующее в интерактивном режиме трехмерную модель летящей птицы. Птица в полете машет крыльями. На задний фон должна быть нанесена текстура неба.

Вариант 8
Разработать приложение, визуализирующее в интерактивном режиме трехмерную модель комнаты, состоящей из телевизора, стола и стула и виртуальной камеры. Телевизор показывает изображение, поступающее с виртуальной камеры (используется рендеринг в текстуру). Должна иметься возможность изменять направление и положение виртуальной камеры, а также основной камеры, а также запускать виртуальную камеру в режиме автопилота (камера летает по непрерывной криволинейной траектории, плавно изменяя направление движения и направление).

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

Вариант 10
Разработать приложение, в визуализирующее в интерактивном режиме новогоднюю ель, на которой висят шары. На верхушке ели располагается звезда. Иголки могут быть реализованы при помощи линий.

0