Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики




НазваниеОбразования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики
страница4/4
Дата24.09.2012
Размер0.62 Mb.
ТипДипломная работа
1   2   3   4

Заключение


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

Реализовано несколько вспомогательных алгоритмов, таких как: определение факта принадлежности точки полигону, попадание точки внутрь объекта, несколько функций для работы с нормалями, учитывая обход вершин по часовой стрелке, функции импорта и экспорта из 3ds-формата.

Рассмотрена работа с библиотеками классов. Разработана библиотека классов на основе полученных ранее функций и классов.

Разработан плагин для 3D Studio Max, позволяющий использовать алгоритм построения объекта, полученного в результате пересечения двух других объектов.


Список литературы


  1. Алексей Игнатенко. Геометрическое моделирование сплошных тел [Электронный ресурс]. – 2004. – Режим доступа к ресурсу: http://graphics.cs.msu.su/ru/library/3d/solid_modelling/index.html, свободный.

  2. Библиотека RTFM [Электронный ресурс]. – 2008. – режим доступа к ресурсу: http://docs.luksian.com/programming/delphi/dlldelph/ , свободный

  3. Кожухов И.Б., Прокофьев А.А. Универсальный справочник по математике. – М.: Лист Нью, Вече, 2002. – 544 с.

  4. Компьютерные вести On-line. Плагин своими руками [Электронный ресурс]. – 2007. – Режим доступа к ресурсу: http://www.kv.by/index2007331201.htm , свободный

  5. Ламот А. Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации. /Пер. с англ. – М.: Издательский дом «Вильямс», 2004. – 1424 с.

  6. Отрывок из DEMO.DESSIGN 3D programming FAQ [Электронный ресурс]. – Режим доступа к ресурсу: http://www.codenet.ru/progr/formt/3ds.php , свободный

  7. Романюк А, Сторчак А.. Алгоритмы триангуляции [Электронный ресурс]. – 2004. – Режим доступа к ресурсу: http://www.citforum.ru/programming/theory/alg_triangl/index.shtml, свободный

  8. Скворцов А.В. Триангуляция Делоне и ее применение. – Издательство ТГУ, 2002. – 127с.

  9. GameDev / Формат 3DS: Первый шаг [Электронный ресурс]. – 2005. – Режим доступа к ресурсу: http://www.gamedev.ru/articles/?id=40113&page=2, свободный

  10. GameDev / Р. Марченко. Создание Export плагина для 3D Studio Max [Электронный ресурс]. – 2005. Режим доступа к ресурсу: http://www.codenet.ru/progr/video/3D-Studio-Max-Export-Plugin.php, свободный

  11. GameDev / Основы плагиностроения к 3D Studio Max [Электронный ресурс]. – 2001. Режим доступа к ресурсу: http://www.gamedev.ru/users/wat/articles/MAXPlugins , свободный

  12. 3D Studio File Format Information (3dsinfo.txt) by Jochen Wilhelmy [Электронный ресурс]. – 1997. – Режим доступа к ресурсу: http://www.jalix.org/ressources/graphics/3DS/_unofficials/3ds-info.txt , свободный

  13. Autodesk 3ds Max 8 SDK Help



Приложение А. Руководство пользователя 3D Studio Max


Загрузка плагина.

Работоспособность плагина в среде 3D Studio Max младше версии 5.0 не гарантируется.

Для того, чтобы 3D Studio Max распознал плагин и загрузил в систему, необходимо:

  1. скопировать плагин JoinObjects.dlu в папку stdplugs в каталог установки 3D Max

  2. запустить 3D Studio Max. Плагин должен автоматически загрузиться в память. Для проверки корректной загрузки можно использовать окно Plug-in Manager, находящееся в меню Customize (см. рисунок А). Если справа о названия файла плагина стоит loaded, то файл корректно распознан.




Рисунок А. Окно Plug-in Manager


  1. далее нужно добавить кнопку запуска плагина в перечень утилит. Для этого надо перейти на вкладку Utilities в основной панели инструментов, нажать кнопку Configure Button Sets. Установить счетчик Total Buttons на единицу больше и перетащить плагин JoinObjects, который находится в списке Utiliites данного окна в группе Utilities на кнопку, появившуюся в самом конце списка после увеличения счетчика.

  2. После закрытия окна Configure Button Sets появится кнопка в списке Utilities c названием Join Objects


Работа с плагином

Форма плагина содержит 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 faces[3]; //грани.

} 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;


1   2   3   4

Похожие:

Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconМинобрнауки томский государственный университет факультет информатики утверждаю
Цель курса – закрепление теоретических знаний по теоретическим и математическим основам информатики, навыков создания и анализа программных...
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconМинобрнауки томский государственный университет факультет информатики утверждаю
Цель курса – изучение математических основ и алгоритмов представления и обработки изображений
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconМинобрнауки томский государственный университет факультет информатики утверждаю
Цель курса – формирование основ знаний по теории информации, принципам кодирования, изучение важнейших алгоритмов в этой области
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики icon«Российский экономический университет им. Г. В. Плеханова» Факультет информатики Кафедра информатики
БД. Рассматриваются экономические и технологические характеристики процессов в информационных системах
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики icon«Томский государственный университет систем управления и радиоэлектроники» Кафедра экономики
А. Г. Буймов – Министерство образования и науки Российской Федерации, Федеральное государственное бюджетное образовательное учреждение...
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconРоссийской Федерации Томский государственный университет Философский факультет Кафедра политологии
Молодежные политические объединения как политтехнологии –22
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconГеофизический факультет кафедра информатики и гис
Министерство образования и науки РФ российский государственный геологоразведочный университет имени серго орджоникидзе
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconРоссийской Федерации Томский государственный университет Исторический факультет Кафедра истории и документоведения
Специальность 032001 – Документоведение и документационное обеспечение управления
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconМинобрнауки томский государственный университет факультет информатики утверждаю
Требования к уровню освоения дисциплины – владение методами математического анализа
Образования Российской Федерации томский государственный университет факультет информатики Кафедра теоретических основ информатики iconМинобрнауки томский государственный университет факультет информатики утверждаю
Цель курса – изучение методов объектно-ориентированного анализа и проектирования
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница