Учебная работа. Курсовая работа: Построение реалистических изображений поверхности океана с 3-х мерной лодки которая плавает
по машинной графике
На тему:
Построение реалистических изображений поверхности океана с 3хмерной лодки, которая плавает по поверхности океана
СОДЕРЖАНИЕ
СОДЕРЖАНИЕ
1. ВВЕДЕНИЕ
1.1. Современные методы машинной графики
1.2. Рекурсивные методы построения изображения
1.3. Предназначение программки
2. КОНСТРУКТОРСКИЙ РАЗДЕЛ
2.1. Выбор и обоснование применяемых алгоритмов
2.2. Базисные методы
2.2.1. Метод оборотной трассировки лучей
2.2.2. Глобальная модель освещения Уиттеда
2.2.3. Стохастический суперсэмплинг
2.2.4. Шум Перлина
2.3.Система координат
2.4. Объекты сцены
2.4.1. солнце
2.4.2. Лодка
2.4.3. Аква поверхность
2.5.Базисные трехмерные объекты
2.5.1. Сфера
2.5.2. Треугольник
2.6. Текстура и фактура
2.6.1. Общие сведения
2.6.2. Наложение текстуры на треугольник
2.6.3. Фактура
3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ
3.1. Выбор и обоснование языка и среды программирования
3.2. структура классов программки
3.2.1. Математические абстракции
3.2.2. Вспомогательные классы параметров трехмерных объектов
3.2.3. Базисные трехмерные объекты
3.2.4. Источник света
3.2.5. Сцена
3.2.6. методы визуализации
3.2.7. Классы интерфейса
3.3. Пользовательский интерфейс
3.3.1. Основное меню
3.3.2. Диалог установки размера изображения
3.3.3. Диалог установки характеристик сцены
3.3.4. Диалог установки характеристик камеры
3.4. Условия внедрения программки
3.5. Воззвание к программке
3.6. Входные и выходные данные
3.7. Сообщения
4. ЭКСПЕРИМЕНТАЛЬНО-ИССЛЕДОВАТЕЛЬСКИЙ РАЗДЕЛ
4.1. Описание тестов
4.2. Результаты тестов
5. ЗАКЛЮЧЕНИЕ
6. СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
приложение 1
1. ВВЕДЕНИЕ
1.1 Современные методы машинной графики
В истинное время вопросцы, связанные с отображением на дисплее монитора различных изображений, как никогда животрепещущи. Графика употребляется фактически во всех областях деятель человека, так либо по другому связанных с внедрением компа. Графическое инфы и организации взаимодействия юзера с вычислительной машинкой, так и неотъемлемой частью вычислительного комплекса, к примеру, при моделировании сложных действий, природных явлений, близкой к реальности графики в трехмерных компьютерных играх.
До недавнешнего времени главным аспектом выбора метода отображения трехмерных объектом являлась скорость вычислений, в силу того, что мощности компов не хватало для настоящей реализации имеющихся алгоритмов.
Примером таковых «стремительных» алгоритмов являются методы, такие как z-буфер, использующие построчный просчет видимого изображения; эти способы давали полностью приемлемую скорость и до сего времени употребляются в ряде всевозможных случаев, когда на первом месте стоит быстродействие. Но они имеют один значимый недочет, который в ряде всевозможных случаев сводит на нет их достоинства: с помощью их нереально выстроить высокореалистичные изображения с отображением таковых оптических эффектов, как отражение, преломление, блики света от воды и т.д. Были пробы сымитировать подобные эффекты, накладывая на объекты, заблаговременно просчитанные текстуры освещенности, что в совокупы с действенными методами оптимизации несколько приближало изображение к действительности. Таковой подход обширно употреблялся в трехмерных компьютерных играх и был доведен разрабами фактически до совершенства. Но того свойства изображения, которое быть может получено с применением рекурсивных алгоритмов, таковых как ровная и оборотная трассировка лучей, также метод излучательности, им никогда не достигнуть.
1.2 Рекурсивные методы построения изображения
Для получения вправду близких к реальности изображений, сравнимых с фото, в истинное время существует три метода: метод прямой трассировки лучей, метод оборотной трассировки лучей и метод излучательности.
Метод прямой трассировки лучей разработан уже издавна, но, как и в момент его сотворения, в истинное время он применяется весьма не много в силу только огромных вычислительных издержек и значимой избыточности вычислений. Не считая того, весьма тяжело предсказать время вычисления, которое может оказаться неприемлемо огромным. Но метод все таки употребляется, так как свойство и реалистичность получаемого изображения весьма высоки.
метод оборотной трассировки лучей в той либо другой модификации является главным средством получения высокореалистичных изображений с большинством вероятных оптических эффектов, наблюдаемых в настоящей жизни. Итог работы метода оказывается весьма реалистичным. В истинное время оборотная трассировка лучей становится все наиболее пользующейся популярностью, и существует тенденция внедрения модификаций этого метода в программках, требующих построения трехмерных изображений в настоящем времени, к примеру, в компьютерных играх. Это сделалось вероятным благодаря тому, что данный метод естественным образом распараллеливается и, таковым образом, полностью может употребляться многопроцессорными системами.
Еще одним рекурсивным методом построения реалистических изображений, принципно отличающимся от перечисленных, является метод излучательности. В отличие от трассировки лучей, основанной на принципах геометрической оптики, данный способ употребляет законы сохранения энергии, что дозволяет моделировать сцену на физическом уровне подобающую действительности. метод излучательности обычно употребляется в композиции с оборотной трассировкой лучей.
1.3 Предназначение программки
Данная программка создана для построения реалистических изображений поверхности воды с трехмерным объектом на ней. В ее базе лежит метод оборотной трассировки лучей, включающий в себя поддержку отражения и преломления лучей, также учет таковых оптических эффектов, как блики от солнца, и разных волнений аква поверхности. Добавочно реализованы такие методы, как наложение текстуры, отображение фактуры поверхности, устранение «лестничного» эффекта по методу стохастического суперсэмплинга.
Сцена состоит из аква поверхности, трехмерной лодки и солнца. Юзер имеет возможность редактировать размеры лодки, ее положение в пространстве. Освещенность сцены и положение солнца рассчитываются зависимо от введенных юзером характеристик: дата, время и географическое положение. Программка может, как строить один кадр сцены, так и последовательность кадров (мультипликация), когда лодка движется зависимо от направления и скорости ветра.
2. КОНСТРУКТОРСКИЙ РАЗДЕЛ
2.1 Выбор и обоснование применяемых алгоритмов
Базисным методом при разработке данной программки был избран метод оборотной трассировки лучей. Главным его преимуществом является получение намного наиболее близких к реальности изображений, чем при применении алгоритмов, таковых как метод z-буфера. Высочайшая реалистичность достигается поэтому, что метод основан на законах оптики и может воспроизводить эффекты, труднодоступные остальным методам – отражение, преломление и четкие тени. Не считая того, метод оборотной трассировки учитывает специфику параметров материалов отображаемых объектов.
К преимуществам метода можно отнести также невысокую Потребность в памяти, поэтому что при построении изображения интенсивность всякого пиксела рассчитываются автономно, и память расходуется лишь на хранение текущего дерева луча.
Главным недочетом метода оборотной трассировки лучей является его очень низкая скорость, но процесс вычисления естественным образом распараллеливается, что делает вероятным расчет разных участков изображения на отдельных микропроцессорах либо даже компах в сети. Таковым образом, можно добиться скорости прорисовки, близкой к реальному времени.
Для расчета интенсивности всякого пиксела употребляется глобальная модель освещения Уиттеда, как испытанная временем и позволяющая получить реалистичное изображение, в то же время, давая приемлемую скорость, в отличие, к примеру, от глобальной модели Холла, учитывающей зависимость коэффициентов диффузного и френелевского отражения, также коэффициента френелевского пропускания от длины волны и параметров вещества
Для моделирования аква поверхности взят метод наложения фактуры (bump-mapping). Сама фактура генерируется при помощи шума Перлина, который потом интерполируется при помощи функции косинусов. Данный метод дозволяет достигнуть большего быстродействия и дает применимые результаты для огромных аква поверхностей (море, океан), в то время как остальные методы (резвые преобразования Фурье (FFT), дифференциальные уравнения движения аква потоков, фракталы) требуют, как огромных вычислительных издержек при расчете, так и аппроксимации аква поверхности обилием примитивов, что приводит к большим затратам по времени и неприемлемы для программной реализации.
Для увеличения реалистичности изображаемых объектов употребляются методы текстурирования и фактурирования. Применяя их, можно достигнуть практически фотографической реалистичности прорисовки поверхности объекта.
Еще одним добавлением к базисному методу трассировки является стохастический суперсэмплинг, позволяющий убрать выпуклости на границах объектов еще эффективнее, чем заурядно используемый для устранения “лестничного” эффекта суперсэмплинг. Данный подход указывает хорошие результаты даже при пропускании всего 1-го луча на пиксел.
2.2 Базисные методы
2.2.1 Метод оборотной трассировки лучей
Мысль метода оборотной трассировки лучей унаследована от выдуманного ранее метода прямой трассировки лучей. Сущность метода в испускании из точки наблюдения луча через каждую точку картинной плоскости и определение интенсивности данной точки методом отслеживания маршрута испущенного луча, который ведет себя по законам геометрической оптики. метод рекурсивен – при попадании на поверхность объекта луч делится на отраженный и преломленный и продолжает собственный путь. Таковым образом, можно выстроить дерево хода луча, где узел является пересечением луча с поверхностью, а исходящие из узла ветки – отраженный и преломленный лучи. Ветвь кончается, когда поиск пересечения соответственного луча с объектами сцены дает плохой результат. Но при таком подходе просто получить нескончаемую рекурсию – в случае, к примеру, расположенных друг напротив друга безупречных зеркал луч будет отражаться от их нескончаемо. Для предотвращения схожих эффектов, также для увеличения скорости вычислений вводят предельное количество узлов в дереве луча.
При пересечении луча с поверхностью направления отраженного и преломленного лучей определяются, исходя из законов геометрической оптики.
Отраженный луч строится, исходя из того, что падающий луч, отраженный и нормаль к поверхности в точке касания лежат в одной плоскости, и угол падения равен углу отражения (рис. 2.1).
Рис. 2.1
Вектор отраженного луча рассчитывается последующим образом:
(2.1)
Для преломленного луча употребляется законСнеллиуса, который говорит, что отношение синусов углов падения и отражения равно отношению абсолютных коэффициентов преломления сред (рис. 2.2).
Преломление луча
Рис. 2.2 Вектор преломленного луча рассчитывается по формулам /8/:
(2.2)
Где
(2.3)
нужно увидеть, что главный сложностью метода оборотной трассировки лучей является нахождения точки пересечения луча с объектом сцены и определение нормали к поверхности в данной точке. Данный вопросец тщательно рассматривается в разделе 2.3.
2.2.2 Глобальная модель освещения Уиттеда
Определение интенсивности точки на поверхности объекта осуществляется согласно глобальной модели освещения Уиттеда:
(2.4)
где , , – соответственно, коэффициенты растерянного, диффузного и зеркального отражения, — коэффициент пропускания.
Глобальная модель освещения Уиттеда
Рис. 2.3
Из рис. 2.3 виден смысл входящих в формулу величин. Трассируемый луч отражается от поверхности в направлении и преломляется (если коэффициент пропускания не равен нулю) в направлении . В таком случае интенсивность в точке поверхности, на которую свалился трассируемый луч, будет складываться из интенсивности фонового освещения , интенсивностей и за счет света, пришедшего с направлений соответственно отраженного и преломленного луча, также диффузной и зеркальной составляющей от всякого источника света ( — направление на -й источник), при этом тут учитывается не четкое направление отражения луча от источника, а так называемое glossiness, либо распределенное отражение – распределение отраженного света в неком телесном угле, обусловленное микрорельефом (шероховатостью) поверхности и зрительно наблюдаемое в виде светового блика, имеющего тем огромные размеры, чем выше шероховатость поверхности. При определении интенсивности — го источника света учитывается ослабление света при условии нахождения меж рассматриваемой точкой поверхности и — ым источником полупрозрачных тел: в этом случае интенсивность ослабляется методом умножения ее на коэффициент затенения (shading), прямо зависящий от коэффициента пропускания тела. Если же меж источником света и точкой лежат непрозрачные объекты, данный источник игнорируется.
В уравнении Уиттеда увлекателен член:
(2.5)
где — это, практически, косинус угла меж направлением отраженного луча от -го источника света и направлением на точку испускания базисного трассируемого луча . Этот член уравнения Уиттеда обуславливает отображение бликов на поверхности тела, но он не имеет ничего общего с физическими законами и был эмпирически получен Фонгом. Степень p, в которую возводится упомянутый выше косинус, именуется коэффициентом Фонга и описывает пространственное распределение отраженного света.
На рис. 2.4 изображена функция . Видно, что чем больше коэффициент p, тем меньше по размерам будет блик и тем поближе зрительно будет материал к безупречному зеркалу.
2.2.3 Стохастический суперсэмплинг
Для увеличения реалистичности изображения требуется выравнивание резких переходов цвета на границах меж объектами. Методом сопоставления изображений приобретенных без алгоритмов устранения ступенчатости и с ними, был изготовлен вывод, что применение алгоритмов выравнивания существенно повысило качество отображения и приблизило его к действительности.
Суперсэмплинг
Традиционным подходом при решении задачки устранения ступенчатости применительно к оборотной трассировке лучей является пропускание через любой пиксел картинной плоскости не 1-го, а нескольких лучей, а потом усреднение приобретенных интенсивностей для получения интенсивности видимого пиксела.
Этот способ получил заглавие суперсэмплинга (supersampling – заглавие пришло из области обработки сигналов и значит увеличение частоты дискретизации для получения наиболее высококачественных результатов). На рис. 2.5 видно, что через любой пиксел пропускается 9 лучей, что значит повышение времени вычисления в 9 раз.
Известен таковой факт, что световые нервные импульсы По месту расположения и по выполняемым функциям выделяют экстерорецепторы интерорецепторы и пропри на сетчатке людского глаза размещены нерегулярно, на случайных расстояниях друг от друга, но не меньше какого-то определенного расстояния. Это послужило предстоящему развитию метода суперсэмплинга.
Опосля вычисления координат субпикселов к любому из их применяется маленькое случайное отклонение, опосля чего же через приобретенные точки пропускаются лучи, и интенсивности усредняются. Этот подход отдал наиболее высококачественное изображение и получил заглавие стохастического суперсэмплинга (рис. 2.6).
Увлекателен тот факт, что данный способ дает положительные результаты даже при использовании его при пропускании лишь 1-го луча на пиксел – в этом случае «лестничный» эффект все равно устраняется. Хотя при внимательном рассмотрении видны выпуклости на границах перехода цветов, но визуально изображение смотрится качественней, чем при построении без использования этого способа.
2.2.4 Шум Перлина
Данный метод употребляется для моделирования неровностей аква поверхности. Шум Перлина генерирует процедурную фактуру, которая потом накладывается на поверхность.
Функция шума
Рис 2.7
Базисное понятие шума Перлина – это функция шума. Функция шума получает целое число как параметр и возвращает случайное число исходя из него. При этом, если передать этот же самый параметр снова, будет получено то же самое число.
Интерполирование функции
Рис 2.8
Интерполированием и выравниванием можно получить непрерывную функцию, которая определена для реальных чисел.
Для аква поверхности нам нужна 2х мерная функция шума /9/:
(2.6)
Для интерполяции используем косинусную интерполяцию:
, (2.7)
где a,b – два параметра, меж которыми мы производим интерполяцию
x — число, от которого зависит итог, если x=0 то ворачивается
a, если x=1, то ворачивается b
2.3 Система координат
В программке принята последующая система координат: ось (ох) указывает на север, ось (oy) ориентирована вертикально ввысь, ось (oz) ориентирована на запад.
2.4 Объекты сцены
2.4.1 солнце
Солнце на сцене является сферой, и задается расстоянием от начала координат(удаленность) радиусом сферы, также направляющим вектором.
Определение единичного направляющего вектора углового положения Солнца происходит на базе даты, времени, широты и угла меж осью Х и направлением на юг. Беря во внимание, что Земля совершает сложное движение, которое складывается из вращательного движения вокруг собственной оси и движения вокруг Солнца по практически радиальный орбите, можно получить последующие соотношения для координат искомого вектора /7/:
(2.8)
где , тут ,
, n – число дней, прошедших с 21 марта,
, тут k – число часов, прошедших с 700
,
δ – широта,
θ – угол меж осью Х и направлением на юг.
Для определения наибольшей интенсивности солнца употребляется последующая формула:
(2.9)
где y –ордината единичного направляющего вектора положения солнца.
Данная формула получена чисто властно.
2.4.2 Лодка
характеристики лодки
Рис. 2.9
Лодка задается последующими параметрами: длина, ширина, высота борта, длина носа, высота мачты, ширина и высота паруса (см. рис. 2.9).
Мачта лодки имеет квадратное сечение, с длиной стороны равной длины лодки. Мачта смещена от середины лодки вспять на одну вторую ширины паруса.
Перемещение лодки определяется по последующей формуле:
(2.10)
где – скорость ветра
t — интервал времени меж кадрами
— угол меж направлением лодки и направлением ветра.
Если ветер дует в другую сторону <0, то лодка стоит и не двигается.
2.4.3 Аква поверхность
Для аква поверхности можно задавать лишь цвет воды. На сцене она представлена как нескончаемо большенный прямоугольник, центр которого находится в точке (0,0,0). На этот прямоугольник накладывается фактура воды.
2.5 Базисные трехмерные объекты
2.5.1 Сфера
Сфера является одной из более просто аналитически задаваемых объектов. В программке для ее определения хранятся координаты ее центра и длина радиуса.
задачка поиска пересечения луча со сферой довольно ординарна и дозволяет найти факт отсутствия пересечения на ранешних шагах вычисления, что приводит к уменьшению времени выполнения программки и дозволяет использовать сферу в качестве большой оболочки объекта, вычисление пересечения луча с которым просит огромных вычислительных издержек.
На рис. 2.10 изображена сфера и два пересекающих ее луча, начало 1-го из которых лежит снутри сферы, а другого – снаружи. Задачку можно разглядывать как плоскую – нахождение пересечения луча с окружностью, в силу того, что через прямую, вдоль которой распространяется луч, и центр окружности, постоянно можно провести плоскость, а линия пересечения сферы с плоскостью, проходящей через ее центр, является окружностью с радиусом, равным радиусу самой сферы.
Нахождение точки пересечения луча со сферой
Рис. 2.10
Разглядим 1-ый вариант, когда начало луча лежит вне сферы – в точке , направление луча определено единичным вектором . Чтоб отыскать точку пересечения, довольно найти расстояние до нее от начала луча в направлении хода луча, другими словами длину отрезка . Зная координаты центра окружности , можно найти вектор , а потом и скалярное произведение , численно равное длине отрезка . Если скалярное произведение вышло отрицательным либо равным нулю – луч заранее не пересекает сферу и последующие проверки не выполняются.
По другому находим расстояние от центра сферы до луча – длину отрезка . В треугольнике , зная длины и , можно отыскать длину отрезка . тут делается последующая проверка: если (являющийся расстоянием от центра сферы до луча) больше радиуса сферы, луч сферу не пересекает.
Из треугольника можно аналогичным образом получить длину отрезка , вычитая который из известного уже отрезка , получаем разыскиваемое расстояние. Если оно меньше либо равно нулю, означает, начало луча лежит на поверхности сферы либо же снутри нее (вариант луча с началом в ), тогда разыскиваемое расстояние рассчитывается методом сложения длин отрезков и .
Нормаль к поверхности в хоть какой точке сферы рассчитывается элементарным образом как вектор, соединяющий центр сферы с точкой на поверхности.
2.5.2 Треугольник
Треугольник является примитивом, средством которого могут быть составлены фактически любые многогранные тела. Он задается точкой – одной из вершин треугольника – и 2-мя векторами и , определяющими ориентацию и длины его сторон (см. рис. 2.11).
Треугольник
Рис.2.11 Пересечение луча с плоскостью
Рис. 2.12
Поиск пересечения луча с треугольником состоит из 2-ух шагов: поиск пересечения луча с плоскостью треугольника и определение нахождения точки снутри него.
1-ый шаг, изображенный на рис. 2.12, довольно прост; делается проверка, пересекает ли луч плоскость, методом сопоставления с нулем скалярного произведения . Если оно больше либо равно нулю, пересечение отсутствует, и последующие деяния можно не делать. Вектор, соединяющий произвольную точку плоскости (в данном случае это угол треугольника) с началом луча, проецируется на нормаль и делится на косинус угла меж направлением луча и нормалью.
Таковым образом, расстояние от источника луча до точки пересечения равно:
(2.11)
2-ой шаг, заключающийся в определении принадлежности точки треугольнику, значительно труднее и востребует доп рассуждений.
локальная система координат
Рис. 2.12Введем локальную систему координат , в какой оси ориентированы вдоль сторон, при этом в границах треугольника координаты изменяются на величину в спектре от 0 до 1 и лежат в заштрихованной области (см. рис. 2.12)
Для этого введем доп переменные:
(2.12)
(2.13)
(2.14)
(2.15)
(2.16)
На основании формул (2.13) и (2.14) введем
(2.17)
где — радиус-вектор точки на плоскости, содержащей треугольник. Тогда координаты в начальной точке будут равны:
(2.18)
где — радиус-вектор точки .
В силу того, что радиус-вектор точки снутри треугольника быть может представлен в виде суммы радиус-вектора точки и линейной композиции векторов и , можем записать разницу координат меж случайной точкой снутри треугольника и начальной точкой :
совсем:
(2.19)
Аналогичным образом можно получить:
(2.20)
Потому что и являются множителями в линейной композиции векторов и , дающей в итоге вектор, конец которого лежит снутри треугольника, если начало привести в точку , то и изменяются в границах от 0 до 1. Тогда, поделив приобретенные в формулах (2.19) и (2.20) различия на величину:
(2.21)
мы получим требуемый итог – локальные координаты в границах треугольника изменяются не наиболее чем на единицу.
совсем имеем формулы для относительных локальных координат:
(2.22)
Подставляя отысканные на первом шаге координаты точки на плоскости в эти выражения и проверив приобретенные результаты на нахождение в интервале и условию , можно сказать, лежит ли точка снутри треугольника, либо нет.
Нормаль к треугольнику в хоть какой его точке определяется как векторное произведение векторов, задающих его стороны.
2.6 Текстура и фактура
2.6.1 Общие сведения
В данной программке предвидено наложение на трехмерные объекты текстур и имитация шероховатостей поверхностей. Для этого предусмотрена загрузка битовых карт формата *.bmp из наружных файлов.
Основное отличие фактуры от текстуры – фактура вызывает изменение направления нормали для данной поверхности
2.6.2 Наложение текстуры на треугольник
Для установления соответствия пиксела объекта с пикселом битовой карты нужно включить точку в формулы (2.22) и, обнаружив относительные локальные координаты данной точки снутри четырехугольника, найти разыскиваемое соответствие, вводя доп множители кратности текстуры.
Этот процесс можно упростить, если принять, что точка , задающая одну из его вершин и являющаяся точкой отсчета при работе с ними, находится сначала координат. сейчас, зная единичные вектора направления сторон и и надлежащие им кратности повторения текстуры и , можем найти координаты данной точки на битовой карте:
(2.23)
где – радиус-вектор точки .
2.6.3 Фактура
Фактурирование – это способ моделирования неровностей изображаемой поверхности без фактического конфигурации формы модели и с очень маленькими вычислительными затратами. Фактуры задается битовой картой высот, где участки с высочайшей интенсивностью означают неровности на поверхности, а участки с низкой интенсивностью – впадины.
Практически способ фактурирования заключается в изменении направления нормали в точке на определенное сторону отражение, преломление и блики. Изначальный метод фактурирования предугадывал воздействие на результирующую нормаль источника света, но в данной программке изготовлено приближение, давшее итог, реалистичный: в нормаль вносятся конфигурации лишь по осям (ox) и (oz) на величины, не зависящие от источника света.
Для нахождения этих величин поначалу нужно установить соответствие меж точкой на поверхности объекта и точкой на битовой карте высот, это осуществляется по методам, описанным в разделах 2.5.2 – 2.5.3. Потом определяются интенсивности пикселов карты высот, примыкающих с приобретенным: , , , . сейчас можно найти значения смещений по осям:
(2.24)
Коэффициент A задает зависимость отличия нормали от наружного действия— в нашем случае ветра.
(2.25)
где v – скорость ветра.
Данная формула получена эмпирически и дает более реалистичные результаты.
3. ТЕХНОЛОГИЧЕСКИЙ РАЗДЕЛ
3.1 Выбор и обоснование языка и среды программирования
В истинное время существует огромное количество языков и сред программирования, почти все из которых владеют довольно высочайшей эффективностью, удобством и простотой в использовании. Но при разработке данной программки употреблялся язык C++ по последующим причинам:
· Этот язык предоставляет программеру широкие способности реализации самых различных алгоритмов, владея высочайшей эффективностью и значимым набором обычных классов и процедур.
· С++ является одним из немногих языков, полностью реализующих концепции объектно-ориентированного программирования, дозволяющие применять множественное наследование, абстрактные и параметризованные классы и т.д. Не считая того, трехмерные объекты, также как и математические абстракции, естественным образом представляются в виде объектов классов, что дозволяет просто и отлично организовывать их взаимодействие, при всем этом сохраняя читаемый и просто изменяемый код. тут же необходимо подчеркнуть такое немаловажное свойство объектно-ориентированного подхода, как повторное внедрение кода. Большая часть из перечисленных преимуществ C++ отсутствует в таковых фаворитных языках, как Pascal и Basic.
В качестве среды разработки была выбрана MicrosoftVisualStudio 6.0:
· Для данной среды есть особый компилятор конторы Intel, который поддерживает весьма сильную оптимизацию программки для микропроцессоров прямо до Pentium 4, что позволило резко повысить быстродействие программки.
· При разработке программки использовались библиотеки классов MFC (MicrosoftFoundationClasses), поставляемые совместно со средой разработки, которые разрешают значительно упростить разработку интерфейса программки по сопоставлению с внедрением обычных функций WindowsAPI.
· Данная среда владеет комфортным редактором кода и отладчиком, предоставляющими огромное количество функций, нужных для действенного написания начального кода и локализации и устранения ошибок в программке.
3.2 структура классов программки
В силу того, что при написании программки использовалась разработка объектно-ориентированного программирования, особенное внимание при рассмотрении ее структуры обязано быть уделено структуре ее классов.
Условно все классы, присутствующие в программке, можно поделить на несколько частей по выполняемым функциям:
· Математические абстракции
· Вспомогательные классы параметров трехмерных объектов
· Базисные трехмерные объекты
· Источник света
· Сцена
· методы визуализации
· интерфейс юзера
3.2.1 Математические абстракции
Математические абстракции в программке представлены 3-мя классами:
1. CVector – трехмерный вектор и операции над ним. Реализованы операции умножения на вектор, умножения на матрицу, умножения и деления на число, нахождение скалярного и векторного произведения, нормализации, определение длины. Некие операции продублированы операторами для удобства записи, также введены операторы действий, совмещенных с присваиванием.
2. CMatrix – двумерная матрица 4х4, применяемая в программке для задания трехмерных преобразований. Посреди реализованных операций: умножение и деление на число, умножение на вектор и на другую матрицу, нахождение оборотной и транспонированной матрицы. В класс матрицы включены статические способы, возвращающие матрицы преобразований: поворота, сдвига и масштабирования.
3. CRay – трехмерный луч, задающийся 2-мя трехмерными векторами: точкой испускания и направлением. Кроме обычных методов-аксессоров владеет способом сдвига на заданную величину в направлении собственного хода, что интенсивно применяется в процессе выполнения метода оборотной трассировки лучей.
3.2.2 Вспомогательные классы параметров трехмерных объектов
Одним из главных классов, задающих наружный вид трехмерного объекта, является класс CSurface, посреди атрибутов которого находятся последующие величины:
· Коэффициент фоновой освещенности
· Коэффициент диффузного отражения
· Коэффициент зеркального отражения
· Коэффициент Фонга (охарактеризовывает пространственное распределение зеркально отраженного света)
· Коэффициент прозрачности
· Коэффициент преломления
· Коэффициент отражения
· Коэффициент затухания
· цвет поверхности
· Нормаль к поверхности (устанавливается опосля нахождения еще одного пересечения).
Иерархия классов, реализующих текстуру и фактуру
Еще одной важной зрительной чертой объекта является его текстура и фактура. И то, и другое реализуется с внедрением одни и тех же классов, составляющих последующую иерархию:Рис. 3.1
Предназначение всякого из этих классов дается в таблице 3.1:
Таблица 3.1
Класс
Комменты
CTexture
Реализует интерфейс воззвания к хоть какому типу текстуры в виде набора виртуальных функций, также хранит указатель на объект класса файла текстуры
CTextureFile
Обеспечивает загрузку из файла битовой карты текстуры либо генерацию процедурной текстуры, ее интерпретацию, также предоставляет способы воззвания к данной карте.
CParallelTexture
Класс текстуры, накладываемой на треугольник
CPerlinNoise
Класс генерирующий процедурную фактуру при помощи шума Перлина
Предназначение классов, реализующих текстуру и фактуру
3.2.3 Базисные трехмерные объекты
Все классы трехмерных объектов, с которыми находится пересечение лучей, наследуются от абстрактного класса C3DObject, который реализует такие операции, присущие всем объектам, как пространственные преобразования, также предоставляет унифицированный интерфейс воззвания к объектам через виртуальные функции (таковым методом реализованы способы поиска пересечений, текстурирования, фактурирования).
Диаграмма классов смотрится последующим образом:
Иерархия классов, реализующих трехмерные объекты
Рис.3.2
Схожая иерархия является нужной в силу того, что для всякого типа трехмерного объекта реализуются свои методы поиска пересечений и определения нормалей к поверхности. Для унификации доступа к разным объектам выделено базисное понятие трехмерного объекта.
Нужно увидеть, что класс объекта содержит внутри себя не экземпляры текстуры и материала, а всего только указатели на их, что дозволяет сберечь память и вычислительные ресурсы, также повторно применять объекты вспомогательных классов в остальных трехмерных объектах.
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.7
Рис. 3.7
3.3.3 Диалог
установки характеристик сцены
Диалоговое окно характеристик сцены
Рис. 3.8 Для задания характеристик сцены употребляется диалог представленный на рис. 3.8, который содержит три вкладки: «Общие», «Лодка», «Вода». Они предусмотрены для задания общих характеристик сцены, для задания характеристик лодки, и для задания характеристик аква поверхности соответственно.
На закладке «Общие», можно изменять дату и время и широту местности для конфигурации положения солнца, характеристики ветра, фоновую освещенность и цвет неба.
Для задания характеристик лодки употребляется вкладка «Лодка» (см. рис. 3.9)
Вкладка «Лодка»
Рис. 3.9 Не считая габаритных характеристик, для лодки можно задавать цвет материала и цвет паруса, для этого необходимо надавить клавишу «Избрать» напротив соответственной надписи – раскроется обычный диалог выбора цвета. Избранный цвет отображается в прямоугольнике слева от клавиши.
Можно также избрать текстуру, которая будет накладываться на лодку и парус, для этого необходимо установить флажки «Текстура лодки» и «Текстура паруса» и избрать файлы текстур в формате BMP.
Для редактирования параметров материала лодки употребляется диалоговое окно редактора материала, показанное на рис. 3.10.
Как можно созидать из рисунка, данное диалоговое окно дозволяет устанавливать все характеристики, обозначенные в классе CSurface.
Рис. 3.10
Вкладка «Вода»
Рис. 3.11 Для аква поверхности можно задать лишь ее цвет при помощи клавиши «Избрать».
Для того, чтоб конфигурации вступили в силу, необходимо надавить клавишу «ОК». Нажатие клавиши «Отмена» оставит все характеристики таковыми, какими они были до конфигурации.
3.3.4 Диалог установки характеристик камеры
Крайним диалоговым окном, которое можно вызвать из редактора сцены, является окно установки характеристик камеры, изображенное на рис. 3.12.
Рис. 3.12
Из рисунка видно, что в диалоговом окне можно установить точку, в какой размещена камера, также задать вектор, вдоль которого будет ориентирован луч наблюдения.
3.4 Условия внедрения программки
Малые требования к аппаратным средствам и программному обеспечению ЭВМ :
Операционная система MicrosoftWindows
машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (либо вычислительной системы) которое делает арифметические и логические операции данные программкой преобразования инфы управляет вычислительным действием и коор IntelPentium 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 Описание тестов
Для исследования временных черт метода оборотной трассировки лучей были проведены опыты по повышению размера рассчитываемого изображения при последующих критериях:
· Без использования текстур
· С внедрением текстур
Опыты проводились на компе IntelPentiumIII 566 МГц, 196 Мб ОП, графическая карта 3dfxVodoo3 4 Мб.
4.2. Результаты тестов
Рис. 4.1
Из приобретенного графика, изображенного на рис. 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-го экземпляра класса В:
Включение классом А экземпляра класса В по указателю либо ссылке:
]]>