Разработка библиотеки для моделирования спецэффектов при помощи системы частиц
Рзработка библиотеки, которая позволит моделировать динамику частиц в трехмерной графики. Выбор средств и методов разработки. Варианты моделирования систем частиц. Моделирование на вершинном шейдере. Диаграммы класса Particle System и PSBehavior.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.02.2016 |
Размер файла | 4,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Разработка библиотеки для моделирования спецэффектов при помощи системы частиц
Введение
Моделирование таких явлений как облака, дым, вода, и огонь было сложно с существующими техниками синтеза изображений. Эти «нечеткие» объекты не имеют гладкой, четкой, и блестящей поверхности; вместо этого их поверхности неровные, сложные и трудно определяемые. Они не являются жесткими объектами, и также не могут быть описаны их движения простыми аффинными преобразованиями, которые распространенны в компьютерной графике.
Метод моделирования таких нечетких объектов называют системой частиц (particle system). В способах представления системы частиц есть три основных отличия от обычных способов представления, используемых в синтезе изображений. Во-первых, объект представляется не набором примитивов элементов поверхности, таких как полигоны, которые определяют его границу, а такими облаками простых частиц, которые задают объем. Во-вторых, система частиц не статическая сущность. Ее частицы изменяют форму и двигаются с течением времени. Новые частицы «рождаются» и старые - «умирают». В-третьих, объект представляемый системой частиц не детерминирован, так как его фигура и форма полностью не указаны. Вместо этого используются стохастические процессы для создания и изменения фигуры и внешнего вида объекта.
В моделировании нечетких объектов метод системы частиц имеет несколько преимуществ над классическими поверхностно-ориентированными техниками. Во-первых, частица - это более простой приметив, чем полигон, простейшее представление поверхности. Таким образом, за то же время вычислений можно обработать больше основных примитивов и произвести более сложное изображение. Второе преимущество в том, что описание модели процедурное и управляется случайными числами. Таким образом, получение высоко детализированной модели не требует много времени работы дизайнера, как это часто бывает с существующими поверхностными системами. Так как описание модели процедурное, система частиц может регулировать детализацию в соответствии с определенным набором параметров отображения.
Для вычисления каждого кадра выполняется следующая последовательность шагов:
генерируются новые частицы в системе;
каждой новой частице назначаются индивидуальные атрибуты;
любые частицы, которые существовали в системе свыше своего предписанного времени жизни, уничтожаются;
остальные частицы двигаются и изменяются в соответствии со своими атрибутами;
изображение живых частиц отображается в буфере кадра.
Система частиц может быть запрограммирована на выполнение любого набора инструкций на каждом шаге [3].
Основные понятия
Перед тем как приступить к описанию теоретической части, необходимо ввести некоторые понятия, используемые в компьютерной графике и необходимые для выполнения работы:
Вершина - это базовый элемент трёхмерного мира, описывающийся положением (координатами) в трёхмерной системе координат и текстурными координатами.
Примитив - это заранее определенный основной геометрический элемент, при помощи которых строятся более сложные модели.
Полигон - геометрический примитив, задающий количество последовательно соединяемых вершин не лежащих на одной прямой.
Текстура - двумерное растровое изображение, которое в процессе отрисовки (rendering) отображается на поверхность объекта. Представлена в качестве двумерного массива, элементами которого являются тексели.
Тексел - элемент текстуры, задающий цвет одного пикселя. Представлен в виде четвёрки целых, положительных чисел r g b a, в диапазоне от 0 до 255, где r g b - красная, зелёная, синяя составляющая цвета соответственно, а - степень прозрачности.
Отрисовка (rendering) - процесс визуализации объектов трехмерного пространства. Текстурные координаты - определяют соответствие между текселями текстуры и пикселями поверхности полигона, на который эта текстура будет отображена.
Нормаль (normal) - это вектор, ортогональный (перпендикулярный) касательной плоскости.
Касательная плоскость в точке гладкой поверхности - плоскость, содержащая касательные ко всем гладким кривым, проходящим через эту точку.
Тангент (tangent) - вектор лежащий в касательной плоскости.
Шейдер (Shader) - общее название для программ, исполняемых видеоадаптером.
Пиксельный шейдер (Pixel Shader) - программа, выполняемая видеоадаптером во время процесса растеризации для каждого пикселя изображения.
Вершинный шейдер (Vertex Shader) - программа, выполняемая видеоадаптером во время обработки вершин.
Геометрический шейдер - в отличие от вершинного, способен обработать не только одну вершину, но и целый примитив. Это может быть отрезок (две вершины) и треугольник (три вершины), а при наличии информации о смежных вершинах (adjacency) может быть обработано до шести вершин для треугольного примитива. Кроме того геометрический шейдер способен генерировать примитивы «на лету», не задействуя при этом центральный процессор. Впервые начал использоваться на видеокартах Nvidia серии 8.
Спрайт - фигура из двух полигонов с наложенной текстурой, представляющая собой квадрат.
Биллборд - спрайт все время повернутый поверхностью к игроку.
Цель работы
Необходимо разработать библиотеку, которая позволит моделировать динамику частиц в трехмерной графики.
Разрабатываемая библиотека должна удовлетворять следующим требованиям:
Простота и скорость в освоении и применении библиотеки - Библиотека не должна требовать от пользователя особых навыков и большого времени для изучения способов применения библиотеки.
Эффективность - Библиотека должна позволять приложениям использовать динамические системы частиц, так чтобы для выполнения остальных вычислений приложения оставалось достаточно процессорного времени.
Гибкость - Библиотека должна быть разработана таким образом, чтобы позволять пользователям создавать множество эффектов, не углубляясь в реализацию библиотеки. Поэтому библиотека должна состоять из простых сборочных классов.
Независимость параметров - Так как библиотека должна состоять из простых сборочных классов, объем разработки для реализации определенного эффекта может быть довольно большой. В этой ситуации должно быть ясно какой параметр на какое действие в результате повлияет.
Расширяемость - Библиотека должна предоставлять общие интерфейсы для добавления пользовательских классов.
Продемонстрировать возможности библиотеки, разработав несколько эффектов при помощи данной библиотеки.
Обзор существующих технологических решений
Dynamic Particle System Framework
Dynamic Particle System Framework [1] - Бесплатный инструмент программирования для создания клиентских систем частиц в XNA.
Особенности:
Единый интерфейс для разных платформ: поддержка 2D и 3D для Windows, Xbox 360, Windows Phone 7, и Zune;
Простая интеграция с игровыми движками.
Полная документация.
Обучающие примеры и их исходные коды.
Позволяет создавать системы частиц за короткое время используя Default Particle Systems и установив значения для встроенных параметров таких как позиция, скорость, ускорение, внешние силы и т.д.
Default Particle Systems может быть расширен, позволяя обеспечить любую сверх требовательную функциональность.
Можно начать с предоставленных шаблонов для быстрого и легкого создания новых систем.
Простая интеграция в существующие проекты. Нужно только добавить ссылку на dll файл.
Использование встроенных Эффектов (т.е. шейдеров) так и клиентских Эффектов.
Изменение стандартных Эффектов (т.е. шейдеров) для быстрого и легкого создания клиентских Эффектов.
Предоставляется класс Animations для легкого создания анимированных частиц.
Система частиц может быть реализована как DrowableGameComponents, если это требуется.
The Particle System API
The Particle System API [2] - это набор функций которые позволяют С++ программам моделировать динамику частиц. API предназначено для спецэффектов в интерактивных и не интерактивных графических приложениях, но не для научного моделирования, хотя принципы Ньютоновской физики были использованы для реализации динамики частиц.
Библиотека не имеет собственных способов отрисовки частиц, поэтому не зависит от графической библиотеки и является кросс платформенной.
API состоит из 4 наборов функций:
Particle Group Calls - Группа частиц системы частиц, которые все действую вместе. Группа может быть рассмотрена как динамичный геометрический объект. С точки зрения графической системы группа частиц это просто еще одна модель для отображения. Эти вызовы создают и уничтожают группы частиц.
Source State Calls - Эти вызовы устанавливают атрибуты частиц, которые будут созданы.
Actions реализуют динамику частиц. Например гравитация и прыжок.
Action List Calls создает и управляет списком действий (Actions).
Библиотека Dynamic Particle System Framework является отличным примером хорошей библиотеки, но освоение данной библиотеки потребует не малого времени чтения документации и разбора примеров.
В случае с The Particle System API дела обстоят немного иначе. Из за отсутствия собственных методов отрисовки, применение данной библиотеки сопровождается необходимостью в реализации своего метода визуализации. С одной стороны это дает некоторую свободу в выборе методов и средств для реализации конечного эффекта, с другой влияет на время разработки проекта в целом.
Выбор средств и методов разработки
Варианты моделирования систем частиц
В моделировании системы частиц основной задачей является определения положения частицы в определенный момент времени на основе начальных данных (скоростей и координат частиц). Для этого необходимо провести интегрирование уравнения движения. От выбора того или иного способа моделирования зависят точность расчета положения частицы и наличие необходимых данных для расчета.
Способы моделирования системы в порядке увеличения точности:
Оценивание функций в замкнутой форме - моделирование без состояний.
Итерационное интегрирование - обновление предыдущего состояния системы [4].
интегрирование Эйлера
интегрирование Верле
интегрирование методом Рунге-Кутта высокого порядка (например 4)
Функция в замкнутой форме
Параметрическое уравнение, описывающее текущее положение:
, |
(4.1) |
где - начальная позиция,
- начальная скорость,
- значение ускорения,
- момент времени.
Не сохраняет промежуточных значений (без состояний).
Явное манипулирование текущей скоростью (например для расчета столкновений) невозможно [4].
Рисунок 4.1 - Функция в замкнутой форме
Интегрирование Эйлера
Интегрирование ускорения в скорость:
, |
(4.2) |
Интегрирование скорости в позицию:
, |
(4.3) |
где - время шага,
- ускорение,
- скорость,
- скорость на предыдущем шаге,
- позиция,
- позиция на предыдущем шаге.
Простота вычислений.
Необходимо хранить позицию и скорость частицы[4].
Рисунок 4.2 - Интегрирование Эйлера
Интегрирование Верле
Интегрирование ускорения в позицию:
, |
(4.4) |
где - позиция два шага назад.
Не зависит от значения скорости частицы.
Время шага должно быть константой.
Явное манипулирование скоростью (например для расчета столкновений) невозможно.[4]
Рисунок 4.3- Интегрирование Верле
На чем моделировать?
Выбор устройства, на котором будут производиться основные вычисления, прямым образом влияет на производительность.
CPU - центральный процессор
Основное ядро
Другое ядро
GPU - графический процессор
Вершинный шейдер
Пиксельный шейдер
Геометрический шейдер
Моделирование на CPU
Достоинства:
Просто, прямолинейно
Все возможно
Недостатки:
Процессор общего назначения не оптимизирован для этого.
Использование тактов, которые могли бы быть использованы для более сложных алгоритмов, например геймплея или искусственного интеллекта.
Требуется загружать результирующие данные моделирования для отрисовки каждого кадра[4].
Моделирование на вершинном шейдере
Вершинный шейдер не может хранить состояние моделирования
Может моделировать только по вышеописанному методу “функции в замкнутой форме”
Принцип работы:
При «рождении» частиц в динамический вершинный буфер загружаются время рождения и начальные значения. В крайних случаях нужно загрузить только «случайное начальное заполнение» (random seed) в качестве начального значения.
При отрисовке установить глобальные параметры функции как константы вершинного шейдера.
Отрисовать точечные спрайты/ треугольники/ квадраты с вершинным шейдером системы частиц[4].
Моделирование на пиксельном шейдере
Данные позиции и скорости записываются в текстуры.
На каждом шаге моделирования из этих текстур отрисовывются в другие одинаковые по размеру текстуры.
Пиксельный шейдер выполняет итерационное интегрирование (Эйлера или Верле)
Позиция текстуры представляется как данные вершины.
Отрисовываются точечные спрайты/ треугольники/ квадраты.
Для конечной отрисовки необходимо использовать текстуру позиций для генерирования вершин. Существует два концептуальных варианта:
Отрисовка в вершинный буфер (R2VB)
Доступна на консолях и на DX10
Доступна на DX9 в неофициальном расширении ATI.
Не общедоступно на DX9!
Доступно на OpenGL через расширения.
Вершинные текстуры
Обращение к текстурам из вершинного шейдера
Вершинный шейдер считывает позиции из статичного вершинного буфера и по этим позициям считывает данные из текстур.
Доступно на DX9 (VS3.0, кроме ATI X1xxx)
Доступно на OpenGL (VS3.0)
Высокое время ожидания на ранних аппаратных средствах c VS3.0.
R2VB обычно имеет более высокую производительность[4].
Моделирование на геометрическом шейдере
Геометрический шейдер может создавать новые или уничтожать старые данные. Что можно использовать для рождения/уничтожения частиц.
Доступно на DX10 и OpenGL на аппаратных средствах с SM4.0[4].
Обоснование выбора.
В качестве средств разработки были выбраны язык программирования C#, набор библиотек XNA 4.0 и среда разработки Visual Studio 2010.
XNA - новая, быстро развивающаяся библиотека для разработки игр и графических приложений. XNA позволяет создавать приложения для Windows, Xbox 360, Zune и Windows Phone.
Так как XNA базируется на DirectX9, то моделирование на геометрическом шейдере не представляется доступным, а пиксельный и вершинный шейдер не достаточно гибки для разработки библиотеки. Для того чтобы обеспечить гибкость библиотеки было решено производить все вычисления на центральном процессоре.
В качестве алгоритма моделирования было выбрано интегрирование Эйлера, из-за простоты вычислений, а так же потому что другие методы не позволяют манипулировать текущим значением скорости частицы (например расчета столкновений).
Частицы будут отображаться при помощи биллбордов. Это объясняется следующими факторами:
В XNA 4.0 прекращена поддержка точечных примитивов.
На биллборд можно наложить текстуру.
При маленьких размерах биллборд не отличить от точечного примитива.
Описание разработки
Библиотека состоит из следующего набора классов:
Класс Particle;
Класс ParticleSystem;
Класс PSBehavior;
Класс PSAcceleration;
Класс PSDeceleration;
Класс PSKillOld;
Класс PSSizeController;
Класс PSColorController;
Класс PSElastic;
Класс PSActionObject;
Класс PSPoint;
Класс PSPlane;
Класс PSRectangle;
Класс PSCircle;
Класс PSSphere;
Класс Emitter;
Класс EmitterRepeater;
Класс EmitterSingleShoot.
Класс Particle
Класс Particle (рис. 5.1) хранит сведения о частице, такие как позиция, скорость, цвет, размер, время жизни.
Рисунок 5.1 - Диаграмма класса Particle
Также содержит метод GetVirtices, который возвращает список вершин для отрисовки примитива, который представляет частицу в трехмерном пространстве.
Класс Particle System
Основным классом библиотеки является класс ParticleSystem (рисунок 5.2). Он хранит список «живых» частиц и настройки для моделирования и отрисовки частиц.
Рисунок 5.2 - Диаграмма класса Particle System
библиотека частица графика шейдер
ParticleSystem наследуется от класса DrowableGameComponent библиотеки XNA, что упрощает и ускоряет интеграцию системы в приложения XNA.
В качестве основных настроек моделирования класс ParticleSystem использует список объектов класса PSBehavior. Комбинируя разные объекты классов наследников PSBehavior с разными параметрами можно получить разные по характеристикам эффекты.
Для настройки параметров отображения используются поля BlendState и Texture, которые задают способ смешивания текстур и саму текстуру, которая накладывается на биллборд.
Класс PSBehavior и его наследники
Класс PSBehavior (рисунок 5.3) объявляет общий интерфейс, а его наследники производят необходимые манипуляции над частицей при помощи метода Update. В метод Update передаются частица, над которой необходимо произвести некоторое действие, и время, прошедшее с момента прошлого изменения.
Рисунок 5.3 - Диаграмма классов PSBehavior
PSAcceleration
Объект класса PSAcceleration (рисунок 5.3) ускоряет частицу в направлении dir.
Листинг 5.1 - Реализация метода Update класса PSAcceleration
public override void Update(ref Particle part, float elepsedTime)
{
part.velocity += dir * elepsedTime;
}
PSDeceleration
Объект класса PSDeceleration (рисунок 5.3) замедляет частицу, умножая каждый компонент вектора скорости на коэффициент k, если скорость находится в пределах vlow и vhight.
Листинг 5.2 - Реализация метода Update класса PSDeceleration
public override void Update(ref Particle part, float elepsedTime)
{
float length = part.velocity.Length();
if (length > vlow && length < vhight)
{
float norm = 1 - (1 - k) * elepsedTime;
part.velocity *= norm;
}
}
Замечание: так как на коэффициент k нет ограничений, то значения больше 1.0 приводит к ускорению частиц в k раз.
PSKillOld
Объект класса PSKillOld (рисунок 5.3) изменяет состояние частицы alive, если ее продолжительность жизни больше duration.
Листинг 5.3 - Реализация метода Update класса PSKillOld
public override void Update(ref Particle part, float elepsedTime)
{
if (part.lifetime >= duration)
part.alive = false;
}
PSSizeController
Объект класса PSSizeController (рисунок 5.3) изменяет размер частицы с текущего до targetsize, в промежутке времени жизни от from до to. Для расчета промежуточных значений размера используется линейная интерполяция. Ясно, что чем меньше разница между начальным значением размера и конечным, и длиннее промежуток времени, тем более плавное изменение размера будет производиться.
Листинг 5.4 - Реализация метода Update класса PSSizeController
public override void Update(ref Particle part, float elepsedTime)
{
if (part.lifetime > from && part.lifetime < to)
{
float timeLeft = to - part.lifetime;
float sizeNeed = targetSize - part.size;
part.size += sizeNeed * elepsedTime / timeLeft;
}
}
PSColorController
Объект класса PSTargetController (рисунок 5.3) изменяет цвет частицы с текущего до targetcolor, в промежутке времени жизни от from до to. Принцип работы точно такой же, как в описанном выше PSSizeController.
Листинг 5.5 - Реализация метода Update класса PSTargetController
public override void Update(ref Particle part, float elepsedTime)
{
if (part.lifetime > from && part.lifetime < to)
{
Vector4 pColor = part.color.ToVector4();
float timeLeft = to - part.lifetime;
Vector4 colorNeed = targetColor - pColor;
pColor+=colorNeed * elepsedTime / timeLeft;
part.color = new Color(pColor);
}
}
PSElastic
Объект класса PSElastic (рисунок 5.3) проверяет частицы на столкновение с поверхностью объекта surface класса PSActionObject. При столкновении вектор скорости частицы раскладывается на нормальную (5.1) и тангенциальную (5.2) составляющие.
, |
(5.1) (5.2) |
Рисунок 5.4 - Разложение вектора скорости.
Коэффициент friction масштабирует тангенциальную составляющую, а restitution - отраженную нормальную составляющую. В результате получаем новую скорость частицы (5.3)[5].
, |
(5.3) |
Рисунок 5.5 - Расчет нового вектора скорости
Листинг 5.6 - Реализация метода Update класса PSElastic
public override void Update(ref Particle part, float elepsedTime)
{
Vector3 normal;
float epsilon = part.velocity.Length() * elepsedTime;
if (surface.Collision(part.position,
epsilon < 0.05f ? 0.05f : epsilon,
out normal))
{
normal = Vector3.Dot(part.velocity, normal) * normal;
Vector3 tangent = part.velocity - normal;
part.velocity = -normal * restitution;
if(tangent.Length() > minvelocity)
part.velocity += tangent * friction;
else
part.velocity += tangent;
}
}
Класс PSActionObject и его наследники
Объекты класса PSActionObject (рисунок 5.6) представляют область в пространстве. Эти объекты можно использовать для создания частиц и для проверки столкновения c частицами при помощи методов GetRandomPoint и Collision. Метод GetRandomPoint возвращает случайную точку из области пространства. Метод Collision возвращает истину, если точка принадлежит области с погрешностью epsilon, и возвращает нормаль к поверхности в этой точке.
Рисунок 5.6 - Диаграмма классов PSActionObject
PSPoint
Объект PSPoint (рисунок 5.6) представляет собой точку в пространстве.
PSPlane
Объект PSPlane (рисунок 5.6) представляет собой плоскость в пространстве. Плоскость определяется точкой origin и нормалью к плоскости normal.
Метод генерации случайных точек генерирует точки в заданной точке origin.
Проверка столкновения производится следующим образом (рисунок 5.4.2.1):
Находим вектор от точки на плоскости до частицы.
Находим проекцию вектора найденного в первом пункте на нормаль.
Если длина проекции меньше погрешности epsilon (формула 5.4), то столкновение[5].
, |
(5.4) |
Рисунок 5.7 - Проверка столкновения
PSRectangle
Объект класса PSRectangle (рисунок 5.6) представляет собой параллелепипед в пространстве. Параллелепипед задается точкой в пространстве origin и двумя векторами u и v, которые указывают направление и длину ребер.
В проверке столкновений в отличии от PSPlane добавляются дополнительные проверки:
Находятся проекции на ребра u и v.
Если длины проекций меньше длин ребер, то столкновение.
PSCircle
Объект класса PSCircle (рисунок 5.6) представляет собой круг в пространстве. Круг задается точкой origin в пространстве, нормалью к плоскости в которой лежит круг, внешним радиусом и внутренним радиусом.
В проверке столкновений в отличии от PSPlane добавляются еще один шаг:
Если длина вектора лежит в диапазоне от внутреннего радиуса до внешнего, то столкновение.
PSSphere
Объект класса PSSphere (рисунок 5.6) представляет собой сферу в пространстве. Сфера задается точкой origin в пространстве, внешним радиусом и внутренним радиусом.
Проверка столкновения производится следующим образом: если расстояние от точки origin до частицы не меньше внутреннего и не больше внешнего радиусов, то столкновение.
Класс Emitter и его наследники
Класс Emitter описывает излучатель частиц (рисунок 5.8). Излучатель необходим для автоматизации и упрощения процесса генерирование новых частиц и добавление их в систему частиц ParticleSystem. Класс Emitter также наследуется от класса GameComponent библиотеки XNA, что упрощает и ускоряет интеграцию излучателя в приложение XNA.
Рисунок 5.8 - Диаграмма классов Emitter
Класс эмиттера содержит следующие поля для управления генерацией частиц:
StartVerticalVelocity устанавливает начальный диапазон вертикальной скорости.
StartHorizontalVelocity устанавливает начальный диапазон горизонтальной скорости.
StartSize устанавливает начальный диапазон размера частиц.
StartColorMin - устанавливает первую границу начального диапазона цвета частиц.
StartColorMax - устанавливает вторую границу начального диапазона цвета частиц.
Метод GenerateParticle создает частицу в зависимости от вышеописанных параметров.
Метод Update вызывает метод GenerateParticle и добавляет созданную частицу в ParticleSystem.
Методы Start и Stop запускают и останавливают эмиттер соответственно.
EmitterRepeater
Данная реализация излучателя (рисунок 5.8) выпускает particlePerSecond частиц в секунду, пока излучатель запущен.
Листинг 5.7 - Реализация метода Update класса EmitterRepeater
public override void Update(GameTime gameTime)
{
float elepsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds;
timeLeftOver += elepsedTime;
while (timeLeftOver > timeBetweenPrticle)
{
ParticleSystem.AddParticle(GenerateParticle());
timeLeftOver -= timeBetweenPrticle;
}
}
EmitterSingleShoot
Данная реализация излучателя (рисунок 5.8) выпускает particlePerShoot частиц при запуске и сразу же останавливается.
Листинг 5.8 - Реализация метода Update класса EmitterSingleShoot
public override void Update(GameTime gameTime)
{
for(int i = 0; i<particlePerShoot; i++)
{
ParticleSystem.AddParticle(GenerateParticle());
}
Stop();
}
Руководство пользователя
Подключение библиотеки
Для того чтоб использовать библиотеку в своем проекте необходимо подключить ее. Библиотека скомпилирована в dll файл, что упрощает ее подключение:
Вам только нужно в своем проекте указать ссылку на dll файл.
Рисунок 6.1 - Добавление ссылки
Рисунок 6.2 - Выбор dll файла библиотеки
И подключить пространство имен ParticleSystemLibrary.
Листинг 6.1 - Подключение пространства имен ParticleSystemLibrary
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using ParticleSystemLibrary;
Создание, настройка и подключение системы частиц
Создаем объект класса ParticleSystem.
Листинг 6.2 - Создание объекта класса ParticleSystem
fountainPS = new ParticleSystem(this);
Подключаем объекты поведения, чтобы придать необходимое поведение нашей системе.
Листинг 6.3 - Настройка объекта класса ParticleSystem
fountainPS.AddBehavior(new PSAcceleration(new Vector3(0, -15, 0)));
fountainPS.AddBehavior(new PSElastic(
PSCircle(new Vector3(0, 0, 0), new Vector3(0, 1, 0), 20),
0.3f,
0.9f,
1f));
fountainPS.AddBehavior(new PSKillOld(6));
Далее необходимо подключить объект класса ParticleSystem к компонентам класса владельца (в нашем случае класса Game1).
Листинг 6.4 - Подключение объекта класса ParticleSystem
this.Components.Add(fountainPS);
И в заключении необходимо в методе Drow класса владельца вызвать метод SetCamera объекта класса ParticleSystem, чтобы передать матрицы вида и проекции, в противном случае система частиц не будет отображать частицы.
Листинг 6.5 - Установка камеры
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
fountainPS.SetCamera(camera.view, camera.projecton);
base.Draw(gameTime);
}
Создание, настройка и подключение излучателя
Создаем объект класса Emitter.
Листинг 6.6 - Создание объекта класса Emitter
fountainEmitter = new EmitterRepeater(this, fountainPS, 300, new PSPoint(new Vector3(0, 1, 0)));
Устанавливаем начальные значения для генерируемых частиц.
Листинг 6.7 - Настройки объекта класса Emitter
fountainEmitter.StartHorizontalVelocity =
new Vector2(1f,2f);
fountainEmitter.StartVerticalVelocity =
new Vector2(20f,22f);
fountainEmitter.StartColorMin =
Color.AliceBlue.ToVector4();
fountainEmitter.StartColorMax = Color.Blue.ToVector4();
Подключаем объект к компонентам класса владельца (в нашем случае класса Game1.
Листинг 6.8 - Подключение объекта класса Emitter
this.Components.Add(fountainEmitter);
Результат
В результате вышеописанных действий мы получим систему частиц, которая моделирует работу фонтана (рисунок 6.3).
Рисунок 6.3 - Результат
Заключение
В результате данного дипломного проекта была разработана библиотека, позволяющая начинающим разработчикам игр с легкостью использовать такое средство как система частиц, для добавления эффектов в свои проекты.
На данный момент в библиотеке имеется 18 классов. Из которых 13 наследуются от 3 классов и имеют общий интерфейс с этими классами. Поэтому для освоения данной библиотеки, т.е. изучения возможностей каждого класса, не требуется много времени.
Библиотека написана на платформе .NET для графической библиотеки XNA. Таким образом, для применения библиотеки необходимо изучить один из языков платформы .NET (С# и т.д.) и библиотеку XNA, что намного быстрее, чем изучать C++ и DirectX или OpenGL.
Эффективность библиотеки зависит от частоты тактового процессора и падает с ростом числа отображаемых частиц. При испытании библиотеки на персональном компьютере с частотой 2.1 ГГц максимальное число частиц, при отображении которых получалась приемлемая частота кадров (30FPS), составила 2000. Для отображения эффекта дыма в демонстрационных примерах потребовалось 250 частиц.
При создании библиотеки активно использовались принципы ООП наследование и полиморфизм, что обеспечило библиотеку необходимой гибкостью и расширяемостью. Для расширения возможностей существует 3 абстрактных класса Emitter, PSBehavior, PSActionObject, от которых можно наследовать создаваемые пользовательские классы.
В дальнейшем проект можно совершенствовать, добавляя новые возможности в моделировании частиц, расширять функциональность, как например проверка столкновений и притяжение между частицами. Также можно совершенствовать и оптимизировать уже существующие алгоритмы, для повышения производительности, точности, графики. Так за счет усложнения математической и физической составляющей библиотека может использоваться для научных моделирований.
Литература
Теория статистики с основами теории вероятностей. Учебник./Под ред. И.Елисеевой.- М.: ЮНИТИ - ДАНА,2011- 446 с.
Зинченко А.П. Статистика. Учебник. -М.: Колос, 2007.-568с.
Основы математической статистики. Под ред. А.П. Зинченко. - М: МСХА .- 2012.-154с.
Практикум по математической статистике. Под ред. О.Б. Тарасовой. М.РГАУ-МСХА. 2009.-137с.
Гатаулин А.М.: Учебное пособие. Система прикладных статистико-математических методов обработки экспериментальных данных в сельском хозяйстве.- М.:МСХА,1992 (ч.1 и 2)
Баканов М.И., Шеремет А.Д. Теория экономического анализа. -- М.: Финансы и статистика, 2009. -416 с.
Практикум по статистике. Учебное пособие. Зинченко А.П., Шибалкин А.Е., Тарасова О.Б., Шайкина Е.В. -М.: Колос, 2001.-392с. КолосС 2003, 2004, 2007.
Чернова Т.В. Экономическая статистика Учебное пособие. Таганрог: Изд-во ТРТУ, 2012
Моисеева Т.М.статья "Мониторинг состояния экономических объектов"
Размещено на Allbest.ru
Подобные документы
"Рой частиц" как наиболее простой метод эволюционного программирования, основанный на идеи о возможности решения задач оптимизации с помощью моделирования поведения групп животных. Схема работы алгоритма, составление кода программы и блок-схемы.
курсовая работа [38,5 K], добавлен 18.05.2013Применение гетерогенных вычислительных систем в задачах молекулярной динамики. Потенциалы взаимодействия частиц. Процесс разработки приложения с использованием Altera Open CL Compiler. Сравнение архитектур ГУ и ПЛИС, их пиковая производительность.
дипломная работа [2,0 M], добавлен 22.08.2017Разработка редактора частиц "Easy Particles", позволяющего создавать несложные эффекты графики. Инсталляция программы, анализ ее надёжности. Модель и сборка приложения. Обоснование экономической целесообразности разработки программного средства.
дипломная работа [742,6 K], добавлен 09.09.2010Создание контекстной диаграммы информационной системы библиотеки. Основные компоненты и особенности ведения каталогов книг и читателей. Моделирование систем поиска и формирования заказов. Разработка диаграммы дерева узлов и логической модели базы данных.
курсовая работа [1,1 M], добавлен 24.06.2013Создание библиотеки классов имитационного моделирования и реализация алгоритма имитационного моделирования системы массового обслуживания "Модель комиссионного магазина". Использование для разработки среды программирования C++. Словарь предметной области.
курсовая работа [581,0 K], добавлен 23.01.2013Применение приемов работы со средой моделирования и с программным комплексом Mat LAB. Особенности моделирования работы системы автогрузовых перевозок. Разработка библиотеки функциональных блоков. Структурная модель системы, расчет ее характеристик.
контрольная работа [561,9 K], добавлен 28.10.2013Унифицированный язык моделирования UML. Проектирование и документирование программных систем. Листинги кода проектируемой программы, сгенерированные RationalRose. Модель информационной подсистемы для управления, учета, контроля и ведения библиотеки.
курсовая работа [1,3 M], добавлен 22.06.2011Изучение дисперсных систем и создание программы, реализующей метод Монте-Карло и моделирующей распределение частиц в определенной области. Исследование методов линейных итераций и вязкой суспензии. Характеристики распределения порошков по размерам.
контрольная работа [1,4 M], добавлен 05.12.2014Построение математической модели движения заряженных частиц, реализация на алгоритмическом языке с помощью ЭВМ. Описание предметной области. Имитация взаимодействия двух разноименно заряженных частиц. Результаты работы программы, руководство пользователя.
курсовая работа [824,0 K], добавлен 26.02.2015Основные понятия трехмерной графики. Характеристика программы для моделирования 3D-объектов в 3D Max и описание ее возможностей. Определение, классификация и история сплайнов. Сплайновые примитивы. Моделирование бокала при помощи модификатора Lathe.
курсовая работа [287,9 K], добавлен 18.06.2015