на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Построение реалистических изображений поверхности океана с 3-х мерной лодки, которая плавает по поверхности океана
(2.24)

Коэффициент A задает зависимость отклонения нормали от внешнего воздействия- в нашем случае ветра.

(2.25)

где v - скорость ветра.

Данная формула получена эмпирически и дает наиболее близкие к реальности результаты.

3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ

3.1 Выбор и обоснование языка и среды программирования

В настоящее время существует множество языков и сред программирования, многие из которых обладают достаточно высокой эффективностью, удобством и простотой в использовании. Однако при разработке данной программы использовался язык C++ по следующим причинам:

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

· С++ является одним из немногих языков, в полной мере реализующих концепции объектно-ориентированного программирования, позволяющие использовать множественное наследование, абстрактные и параметризованные классы и т.д. Кроме того, трехмерные объекты, также как и математические абстракции, естественным образом представляются в виде объектов классов, что позволяет легко и эффективно организовывать их взаимодействие, при этом сохраняя читаемый и легко изменяемый код. Здесь же следует отметить такое немаловажное свойство объектно-ориентированного подхода, как повторное использование кода. Большая часть из перечисленных преимуществ C++ отсутствует в таких популярных языках, как Pascal и Basic.

В качестве среды разработки была выбрана Microsoft Visual Studio 6.0:

· Для этой среды есть специальный компилятор фирмы Intel, который поддерживает очень мощную оптимизацию программы для процессоров вплоть до Pentium 4, что позволило резко повысить быстродействие программы.

· При разработке программы использовались библиотеки классов MFC (Microsoft Foundation Classes), поставляемые вместе со средой разработки, которые позволяют существенно упростить разработку интерфейса программы по сравнению с использованием стандартных функций Windows API.

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

3.2 Структура классов программы

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

Условно все классы, присутствующие в программе, можно разделить на несколько частей по выполняемым функциям:

· Математические абстракции

· Вспомогательные классы свойств трехмерных объектов

· Базовые трехмерные объекты

· Источник света

· Сцена

· Алгоритмы визуализации

· Интерфейс пользователя

3.2.1 Математические абстракции

Математические абстракции в программе представлены тремя классами:

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

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

3. CRay - трехмерный луч, задающийся двумя трехмерными векторами: точкой испускания и направлением. Помимо стандартных методов-аксессоров обладает методом сдвига на заданную величину в направлении своего хода, что активно применяется в ходе выполнения алгоритма обратной трассировки лучей.

3.2.2 Вспомогательные классы свойств трехмерных объектов

Одним из основных классов, задающих внешний вид трехмерного объекта, является класс
CSurface, среди атрибутов которого присутствуют следующие величины:

· Коэффициент фоновой освещенности

· Коэффициент диффузного отражения

· Коэффициент зеркального отражения

· Коэффициент Фонга (характеризует пространственное распределение зеркально отраженного света)

· Коэффициент прозрачности

· Коэффициент преломления

· Коэффициент отражения

· Коэффициент затухания

· Цвет поверхности

· Нормаль к поверхности (устанавливается после нахождения очередного пересечения).

Еще одной немаловажной визуальной характеристикой объекта является его текстура и фактура. И то, и другое реализуется с использованием одни и тех же классов, составляющих следующую иерархию:

Назначение каждого из этих классов дается в таблице 3.1:

Таблица 3.1

Класс

Комментарии

CTexture

Реализует интерфейс обращения к любому типу текстуры в виде набора виртуальных функций, а также хранит указатель на объект класса файла текстуры

CTextureFile

Обеспечивает загрузку из файла битовой карты текстуры или генерацию процедурной текстуры, ее интерпретацию, а также предоставляет методы обращения к этой карте.

CParallelTexture

Класс текстуры, накладываемой на треугольник

CPerlinNoise

Класс генерирующий процедурную фактуру с помощью шума Перлина

Назначение классов, реализующих текстуру и фактуру

3.2.3 Базовые трехмерные объекты

Все классы трехмерных объектов, с которыми находится пересечение лучей, наследуются от абстрактного класса
C3DObject, который реализует такие операции, присущие всем объектам, как пространственные преобразования, а также предоставляет унифицированный интерфейс обращения к объектам через виртуальные функции (таким способом реализованы методы поиска пересечений, текстурирования, фактурирования).

Диаграмма классов выглядит следующим образом:

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

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

3.2.4 Источник света

Источники света являются одними из основных понятий, участвующих в п
остроении трехмерного изображения. В программе реализован только один источника - солнце, однако для возможности добавления новых источников света(Луны, фонарей) и большей гибкости программы был выделен класс-предок CLight, от которого наследуется класс солнечного источника света CSun.

На рис. 3.3 изображена соответствующая диаграмма классов.

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

Метод shadingCoef, реализующий этот механизм, объявлен как виртуальный в классе CLight и реализуется уже в классе CSun.

3.2.5 Сцена

Класс сцены
SeaScene полностью характеризует набор объектов и их свойств, подлежащих визуализации. Он включает:

Объекты лодка, солнце и водная поверхность (экземпляры классов CBoat, CSun, CWater)

· Методы установки параметров камеры

· Методы параметров самих объектов

· Информация о размере строящегося изображения и субпиксельном разбиении

· Методы получения трассирующих лучей

Соответствующая диаграмма классов представлена на рис. 3.4.

3.2.6 Алгоритмы визуализации

Базовые алгоритмы визуализации представлены в классе
CRender. Этот класс хранит указатель на объект класса SeaScene и все действия совершает над ним. Основные методы класса перечислены в таблице 3.2.

Таблица 3.2. Методы класса визуализации

Метод

Комментарии

CRender(SeaScene *scene)

Конструктор класса, принимающий указатель на объект-сцену. Инициализирует объект визуализации.

renderFrame(int xr, int yr, int d, CPaintDC *dc)

Метод построения изображения, являющийся «оболочкой» для всех остальных методов. Включает цикл по пикселам изображаемого изображения, вычисление луча для каждого пиксела, вызов процедур реализации алгоритма и закраски пиксела полученным цветом.

trace(double refr, double att, CRay& ray, int level=0)

Метод, реализующий алгоритм обратной трассировки лучей. Здесь осуществляется поиск пересечений луча с объектами сцены и вызывается процедура определения цвета.

shade(double refr, double att, CRay& ray, C3DObject* obj, int level)

Метод определения цвета точки поверхности. Содержит реализацию формулы Уиттеда и вызов процедуры теневого луча каждого источника света.

3.2.7 Классы интерфейса

Интерфейс данной программы строился путем создания классов диалоговых окон, меню и элементов управления, унаследованных от стандартных классов библиотеки
MFC. Общая диаграмма классов интерфейса изображена на рис. 3.6.

3.3. Пользовательский интерфейс

Программа имеет русскоязычный интерфейс, организованный в виде главного меню и ряда диалоговых окон, позволяющих пользователю после старта программы устанавливать параметры как самих объектов сцены (лодка ,солнце водная поверхность), так положение и направление луча наблюдения камеры и размер получаемого изображения.

Доступ ко всем функциям и настройкам программы осуществляется через главное меню.

3.3.1 Главное меню

Структура главного меню:

- Настройки

· Разрешение - установка размеров получаемого изображения.

· Параметры - установка параметров сцены.

· Положение камеры - установка положения и ориентации камеры

- Построение

· Построение - прорисовка одиночного кадра сцены.

· Движение - циклическая прорисовка кадров при движении лодки

- Выход - завершение работы программы.

3.3.2 Диалог установки размера изображения

Это диалоговое окно предназначено для изменения установленных программой по умолчанию размеров изображения, строящегося по команде «Построить». Это может быть удобно для построения эскиза сцены, так как алгоритм визуализации не является алгоритмом реального времени и построение может занимать существенное время.

Внешний вид диалогового окна с установленными по умолчанию значениями показан на рис. 3.7.

3.3.3 Диалог установки параметров сцены

Диалоговое окно параметров сцены

Рис. 3.8 Для задания параметров сцены используется диалог представленный на рис. 3.8, который содержит три вкладки: «Общие», «Лодка», «Вода». Они предназначены для задания общих параметров сцены, для задания параметров лодки, и для задания параметров водной поверхности соответственно.

На закладке «Общие», можно изменять дату и время и широту местности для изменения положения солнца, параметры ветра, фоновую освещенность и цвет неба.

Для задания параметров лодки используется вкладка «Лодка» (см. рис. 3.9)

Вкладка «Лодка»

Рис. 3.9 Кроме габаритных параметров, для лодки можно задавать цвет материала и цвет паруса, для этого нужно нажать кнопку «Выбрать» напротив соответствующей надписи - откроется стандартный диалог выбора цвета. Выбранный цвет отображается в прямоугольнике слева от кнопки.

Можно также выбрать текстуру, которая будет накладываться на лодку и парус, для этого нужно установить флажки «Текстура лодки» и «Текстура паруса» и выбрать файлы текстур в формате BMP.

Для редактирования свойств материала лодки используется диалоговое окно редактора материала, показанное на рис. 3.10.

Как можно видеть из рисунка, данное диалоговое окно позволяет устанавливать все параметры, указанные в классе CSurface.

Вкладка «Вода»

Рис. 3.11 Для водной поверхности можно задать только ее цвет с помощью кнопки «Выбрать».

Для того, чтобы изменения вступили в силу, нужно нажать кнопку «ОК». Нажатие кнопки «Отмена» оставит все параметры такими, какими они были до изменения.

3.3.4 Диалог установки параметров камеры

Последним диалоговым окном, которое можно вызвать из редактора сцены, является окно установки параметров камеры, изображенное на рис
. 3.12.

Из рисунка видно, что в диалоговом окне можно установить точку, в которой расположена камера, а также задать вектор, вдоль которого будет направлен луч наблюдения.

3.4 Условия применения программы

Минимальные требования к аппаратным средствам и программному обеспечению ЭВМ:

Операционная система Microsoft Windows

Процессор Intel Pentium 133 МГц;

Оперативная память 8 МБ;

SVGA-видеокарта, видеопамять 1 МБ;

1 МБ свободного места на диске .

3.5 Обращение к программе

Передача управления программе осуществляется посредством запуска исполняемого файла grapher.exe.

3.6 Входные и выходные данные

Входные данные: общие параметры объектов сцены.

Выходные данные: изображение сцены.

3.7 Сообщения

При редактировании параметров могут возникать следующие сообщения (см. табл. 3.7.):

Таблица 3.7 «Сообщение программы»

Сообщение

Описание

«Пожалуйста введите число от A до B»

Требуется ввести действительное число из интервала [A;B] для заданного параметра.

«Пожалуйста, введите целое число от A до B»

Требуется ввести целое число из интервала [A;B] для заданного параметра.

«Пожалуйста, введите число»

Данный параметр может быть только числом. Сообщение возникает когда окно ввода не содержит знаков или содержит символы кроме цифр.

4. ЭКСПЕРИМЕНТАЛЬНО-ИССЛЕДОВАТЕЛЬСКИЙ РАЗДЕЛ

4.1 Описание экспериментов

Для исследования временных характеристик алгоритма обратной трассировки лучей были проведены эксперименты по увеличению размера рассчитываемого изображения при следующих условиях:

· Без использования текстур

· С использованием текстур

Эксперименты проводились на компьютере Intel Pentium III 566 МГц, 196 Мб ОП, графическая карта 3dfx Vodoo3 4 Мб.

4.2. Результаты экспериментов

Из полученного графика, изображенного на рис. 4.1, можно заметить:

· С ростом количества пикселей вычислительные затраты возрастают линейно, что имеет большое значение при построении изображений больших размеров.

· Текстурирование и фактурирование требуют весьма небольших затрат времени.

5. ЗАКЛЮЧЕНИЕ

Разработанная программа позволяет получать на экране растрового дисплея реалистическое изображение трехмерной сцены моря с лодкой и учитывать различные природные явления как ветер, блики на воде, благодаря алгоритму обратной трассировки лучей и глобальной модели освещения Уиттеда. Также были разработаны алгоритмы для решения частных задач: определение положения солнца в зависимости от даты и времени наблюдения и широты местности, расчет неровностей водной поверхности с помощью шума Перлина. Программа полностью удовлетворяет требованиям технического задания, обеспечивая:

· Возможность задания сцены с различными размерами и положением лодки, положением солнца и освещенностью, а также произвольно задавать расположение и направление луча камеры.

· Поддержку наложения на трехмерные объекты текстуры и фактуры.

· Улучшение качества изображения с использованием алгоритма стохастического суперсэмплинга.

· Русскоязычный интерфейс пользователя.

По результатам работы программы были сделаны выводы:

· Алгоритм обратной трассировки лучей обеспечивает высокую степень реалистичности изображения, однако скорость выполнения вычислений на однопроцессорных системах оставляет желать лучшего. Тем не менее, скорее всего, данный алгоритм будет широко использоваться на параллельных вычислительных машинах, таких как кластеры, а также MISD- и MIMD-машинах.

· Без дополнительной оптимизации увеличение размера изображения ведет к значительному увеличению времени построения.

· Алгоритм моделирования водной поверхности с помощью фактурирования шумом Перлина показал реалистичность изображения воды при достаточно низких вычислительных затратах.

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

6. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1.
Роджерс Д. Алгоритмические основы машинной графики / Пер. с англ. -М.:Мир, 1989. - 512 с.,ил.

2. Авдеева С.М., Куров А.В. Алгоритмы трехмерной машинной графики: учебное пособие. - М.: Издательство МГТУ им. Н.Э.Баумана, 1996. - 60 с., ил.

3. Шикин Е.В., Боресков А.В. Компьютерная графика. Динамика, реалистические изображения. - М.: Диалог-МИФИ, 1995. - 288 с.

4. Prosise, Jeff. Programming Windows with MFC - 2nd ed. - Washington - Microsoft Press,1999. - 112 с., ил.

5. Страуструп Б. Язык программирования C++, спец. изд. / Пер. с англ. - М.: СПб.: Издательство Бином - Невский Диалект, 2002. - 1099 с., ил.

6. Воронцов-Вельяминов Б.А. Очерки о Вселенной.-М.: Наука, 1964.- 552с., ил.

7. Watt, Mark. Ligth-Water Interaction using Backward Beam Tracing // Computer Graphics, Volume 24, Number 4, August 1990 - London, Digital Pictures, 1990 - 23-32

8. Борн М., Вольф Э. Основы оптики.- М.: Наука, 1970, 885 с.

9. Hugo Elias. Perlin Noise // Сайт Virgin.net ISP:

URL: http://freespace.virgin.net/hugo.elias/models/m_perlin.htm

Приложение 1

Обозначения, использованные в диаграммах классов:

Класс:

Наследование класса B от класса A:

Агрегация классом А одного экземпляра класса В:

Включение классом А экземпляра класса В по указателю или ссылке:

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.