Скачать 483.19 Kb.
|
Заключение В данной работе был реализован алгоритм построения трехмерного объекта, представленного набором треугольников, на основе пересечения двух других объектов. Реализовано несколько вспомогательных алгоритмов, таких как: определение факта принадлежности точки полигону, попадание точки внутрь объекта, несколько функций для работы с нормалями, учитывая обход вершин по часовой стрелке, функции импорта и экспорта из 3ds-формата. Рассмотрена работа с библиотеками классов. Разработана библиотека классов на основе полученных ранее функций и классов. Разработан плагин для 3D Studio Max, позволяющий использовать алгоритм построения объекта, полученного в результате пересечения двух других объектов. Список литературы
Приложение А. Руководство пользователя 3D Studio Max Загрузка плагина. Работоспособность плагина в среде 3D Studio Max младше версии 5.0 не гарантируется. Для того, чтобы 3D Studio Max распознал плагин и загрузил в систему, необходимо:
Рисунок А. Окно Plug-in Manager
Работа с плагином Форма плагина содержит 3 группы кнопок (см. Рисунок Б): группы Object1 и Object2 предназначены для выбора двух объектов. В группе Calculate result object содержится кнопка Calculate and output, при нажатии на которой выполнится функция построения третьего объекта на основе двух предыдущих и результат будет отображен в окнах 3D вида. Для каждого объекта предусмотрена функция, при помощи которой можно определить положение точки относительно объекта. Для данной задачи ее можно применять для определения направления нормалей (объекты должны быть замкнутыми и нормали должны смотреть не вовнутрь объекта, а наружу). Для того, чтобы использовать данную функцию, нужно выбрать точку, делается это с помощью кнопки Pick point (по умолчанию точка имеет координаты (0, 0, 0)) и проверить результат, нажав на кнопку Obj has point. Слева выведется результат операции: true или false Рисунок Б. Панель управления Если функция определения положения точки относительно объекта дала отрицательный результат (визуально видно, что точка находится внутри/снаружи объекта, а функция вернула false/true), то необходимо для дальнейших корректных вычислений развернуть нормали для треугольников объекта. Делается это нажатием на кнопке Invert normals для соответствующего объекта. Приложение Б. Руководство прикладного программиста Файл динамически подключаемой библиотеки имеет название graphics3d.dll. Экспортируемыми функциями библиотеки являются: bool WriteObject3ds(const char *path, object_3d *obj); Позволяет записать объект obj в файл формата *.3ds. path указывает путь к файлу, включая его название. Если такого файла не существует, то он будет создан object_3d* JoinObjects(object_3d* obj1, object_3d* obj2); На основе двух пересекающихся трехмерных объектов, которые передаются как параметры функции, строит результирующий объект и возвращает указатель на него. object_3d* ReadObject3ds(const char* path); Позволяет считать объект из *.3ds файла, путь к которому передается в переменной path Для использования этих функций во внешнем приложении необходимо прописать и заполнить при необходимости структуры (интерфейс библиотеки): typedef struct point_type { double x, y, z; }point_3d; typedef struct object_type { vector vertexes; //все вершины объекта vector } object_3d; Приложение В. Руководство разработчика В гарницах данной работы реализованы два продукта, позволяющих работать с операцией объединения двух трехмерных объектов: динамическая библиотека (файл graphics3d.dll) и плагин для 3D Studio Max 8.0 (файл JoinObkect.dlu). Динамическая библиотека разработана в среде Visual C++, для разработки плагина использовался 3D Studio Max SDK. В ходе работы разработаны следующие классы: POIN3D – позволяет работать с трехмерной точкой. LINE3D – позволяет работать с трехмерной прямой. Содержит такие функции как:
LUCH3D – позволяет работать с лучом в трехмерном пространстве. Луч представляет собой точку начала и направление. Специфичных функций не содержит, используется как вспомогательный класс OBJECT3D – позволяет работать с трехмерным объектом. Содержит такие функции как:
POLI3D – позволяет работать с полигоном в трехмерном пространстве. Содержит такие функции как:
TRIANGLE3D – позволяет работать с треугольником в трехмерном пространстве. Содержит такие функции как:
VECTOR3D – позволяет работать с вектором в трехмерном пространстве. Содержит такие функции как:
FORMAT3DS – позволяет работать с форматом *.3ds-файлов. Содержит такие функции как:
Приложение Г. Пример файла в формате 3ds в двоичном виде Пирамида с четырехугольным основанием в формате 3ds Приложение Д. Прототипы функций экспорта данных в dll и работа с интерфейсами object_3d* ModificationObject1(OBJECT3D &other); //эта функция не //экспортируется OBJECT3D ModificationObject2(object_3d *other); //эта функция не //экспортируется extern "C" //Тут экспортируемые функции { _declspec (dllexport) bool WriteObject3ds(const char *path, object_3d *obj); _declspec(dllexport) object_3d* JoinObjects(object_3d* obj1, object_3d* obj2); _declspec(dllexport) object_3d* ReadObject3ds(const char* part); } object_3d* ModificationObject1(OBJECT3D &other); OBJECT3D ModificationObject2(object_3d *other); Приложение Е. Пример импорта функций из dll внешним приложением HINSTANCE hinstLib = LoadLibrary("graphics3d.dll"); if (hinstLib == NULL) { printf("ERROR: unable to load DLL\n"); getchar(); } //получаем функцию JoinnObjects typedef object_3d* (*JoinObjects)(object_3d *, object_3d *); JoinObjects JoinObj; JoinObj = (JoinObjects)::GetProcAddress (hinstLib, "JoinObjects"); //получаем функцию ReadObject3ds typedef object_3d* (*ReadObject3ds)(const char*); ReadObject3ds ReadObj; ReadObj = (ReadObject3ds)::GetProcAddress(hinstLib, "ReadObject3ds"); object1 = new object_3d; object2 = new object_3d; object1 = ReadObj("object1.3ds"); object2 = ReadObj("object2.3ds"); object3 = new object_3d; object3 = JoinObj (object1, object2); //а теперь запишем в 3ds файл object3 bool res; //тут будет результат записи в файл typedef bool (*WriteObject3ds)(const char *, object_3d *); WriteObject3ds WriteObj; WriteObj = (WriteObject3ds)::GetProcAddress(hinstLib, "WriteObject3ds"); res = WriteObj("ResObj.3ds", object3); //в файле "ResObj.3ds" будет //лежать результирующий объект cout << "\nWriteObject3ds: " << res; |
Министерство образования и науки российской федерации томский государственный... Целью дисциплины является ознакомление студентов с базовыми понятиями следующих разделов информатики: теория информации, технические... | Красноярский государственный педагогический университет факультет информатики Задание: Разработать требования к оборудованию и оснащению кабинета информатики с заданным количеством персональных эвт в учебном... | ||
Минобрнауки томский государственный университет факультет информатики утверждаю Задача учебного курса – освоение психолого-педагогических знаний, вопросов методики преподавания, современных методов обучения | Молдавский Государственный Университет Факультет Математики и Информатики.... За последние 9 лет (c 1993) в мире персональных компьютеров появился новый участник – персональный карманный компьютер (кпк). Большую... | ||
Программа по формированию навыков безопасного поведения на дорогах... Московский Государственный Университет Приборостроения и Информатики, Факультет "Технологическая информатика", кафедра "Компьютерный... | Министерство образования и науки РФ новосибирский государственный... Когда появляется изображение цепи ордена Андрея Первозванного на российском гербе | ||
Министерство образования и науки российской федерации томский государственный... Государственное общеобразовательное учреждение-средняя общеобразовательная школа | Государственное образовательное учреждение высшего профессионального... Аннотация умкд… | ||
Государственное образовательное учреждение высшего профессионального... Аннотация умкд… | Государственное образовательное учреждение высшего профессионального... Аннотация умкд… | ||
Российской Федерации Федеральное государственное бюджетное образовательное... «Московский государственный университет экономики, статистики и информатики (мэси)» | Российской Федерации Федеральное государственное бюджетное образовательное... «Московский государственный университет экономики, статистики и информатики (мэси)» | ||
Министерство сельского хозяйства российской федерации Е образовательноЕ учреждениЕ высшего профессионального образования «Московский государственный университет экономики, статистики... | Российской Федерации Карельский государственный педагогический университет... В 1962 году на факультете физической культуры была создана первая специальная кафедра теоретических основ физического воспитания.... | ||
Методические рекомендации по подготовке и выполнению вкр министерство... Фгбоу впо «Московский Государственный Университет экономики, статистики и информатики (мэси)» | О. В. Артюшкин Хакасский государственный университет им. Н. Ф. Катанова... При рассмотрении информатики с позиций гуманитарной, технической, естественной и фундаментальных наук даются ее определения. В заключительной... |