Смекни!
smekni.com

Построение реалистических изображений поверхности океана с 3-х мерной лодки которая плавает (стр. 4 из 6)

Таким образом, расстояние от источника луча до точки пересечения равно:

(2.11)

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

Локальная система координат

Рис. 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.