Разработка библиотеки для моделирования спецэффектов при помощи системы частиц

Рзработка библиотеки, которая позволит моделировать динамику частиц в трехмерной графики. Выбор средств и методов разработки. Варианты моделирования систем частиц. Моделирование на вершинном шейдере. Диаграммы класса 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.