logo
Работа с 3D-моделями в 3D max

2. Обзор методов решения задач

Задача состоит в возможности работать с 3D-моделями на 3D-сцене. Для этого в Microsoft Vusial C# приходится добавлять специальные библиотеки, платформы специально разработанные для этих действий, чтобы упростить работу в самой среде. Самые распространенные в данные момент это три платформы OpenGL, XNA Game Studio и WPF(Windows Presentation Foundation) . OpenGL (Open Graphics Library -- открытая графическая библиотека, графическое API) -- спецификация, определяющая независимый от языка прораммирования платформонезависимый программный интерфейс для написания приложений, использующих двухмерную и трёхмерную компьютерную графику. На базовом уровне, OpenGL -- это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации -- библиотеки функций, соответствующих набору функций спецификации. Реализация использует возможности оборудования там, где это возможно. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests -- тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию последних разработчикам аппаратного обеспечения. Windows Presentation Foundation (WPF) -- система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), использующая язык XAML. Microsoft XNA (англ. XNAs Not Acronymed) -- набор инструментов с управляемой средой времени выполнения (.NET), созданный Microsoft, облегчающий разработку и управление компьютерными играми. XNA стремится освободить разработку игр от написания «повторяющегося шаблонного кода» и объединить различные аспекты разработки игр в одной системе. Набор инструментов XNA был анонсирован 24 марта 2004 на Game Developers Conference в Сан-Хосе, Калифорния. Первый Community Technology Preview XNA Build был выпущен 14 марта 2006.

Первая платформа наиболее древняя из трех представленных и больше разрабатывалась под С++. Сравнивая две оставшиеся платформы я пришел к выводу, что XNA Studio более удобен в по ряду причин. В плане возможностей работы с 3D-моделями, легкости нахождения информации.

3. Разработка общей архитектуры системы

Логически архитектуру данной системы можно представить в виде:

Рис.1. Логически простроенная архитектура системы

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

Если раскрывать все блоки, то мы получим архитектуру нашего проекта (Табл. 1).

Таблица 1. Архитектура проекта

Инициализация

На этапе инициализации проекта проводится инициализация графической и звуковых подсистем, системы ввода данных.

Загрузка ресурсов

Здесь загружаются ресурсы, такие, как текстуры и трехмерные модели, звуки, шрифты.

Начало цикла

Основные действия, которые выполняются при работе программы, организованы в виде цикла. Фактически, цикл - это обязательный элемент любой программы с 3д-моделями.

Считывание данных пользовательского ввода

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

Вычисления

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

Проверка критерия прекращения программы

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

Вывод изображений, проигрывание звуков

После завершения этапа вычислений в программе имеются данные для визуализации. В частности, имеются данные о новых позициях объектов, о сообщениях, которые нужно вывести на 3д-сцене, о звуках, которые нужно воспроизвести. На данном этапе проводится перемещение объектов по 3д-сцене, вывод сообщений, проигрывание звука.

Конец цикла

Цикл заканчивается после выполнения условия останова программы.

Освобождение ресурсов

На последнем этапе работы программы проводится освобождение системных ресурсов, занятых программой и выход из ее.

В программе раннее описанную архитектуру представляют ряд методов.

Game1() - Общая инициализация. Game1() - это конструктор класса Game1, который выполняется при создании объекта Game в процедуре Main файла Program.cs.

Initialize() - Инициализация. Сюда же добавляют команды для инициализации звуковой подсистемы игры. Надо отметить, что в этом методе инициализируется все, кроме графических ресурсов игры

LoadContent() - Загрузка ресурсов.

Run() - Запуск цикла.

Цикл в стандартном проекте состоит из двух методов.

Update() - Первый из них - это метод Update(), в котором выполняется прием пользовательского ввода, все необходимые вычисления, проверка критериев останова программы.

Draw() - Второй метод цикла - это метод Draw(), который содержит код для визуализации графики.

UnloadContent() - По окончании цикла этот метод освобождает системные ресурсы.

С помощью этих стандартных методов работа с моделирование упрощается достаточно существенно. Теперь осталось разработать модели обеспечивающие поставленную задачу.

4. Разработка модели движения 3D объекта

Понятие 3D подразумевает под собой систему координат. И поэтому чтобы разработать модель движения изначально надо разобрать систему координат которая используется в программе. И после разберем метод который отвечает за движения который называется «Преобразование в трехмерном пространстве».