Функция шума
Рис 2.7
Базовое понятие шума Перлина – это функция шума. Функция шума получает целое число как параметр и возвращает случайное число исходя из него. Причем, если передать тот же самый параметр еще раз, будет получено то же самое число.
Интерполирование функции
Рис 2.8
Интерполированием и сглаживанием можно получить непрерывную функцию, которая определена для действительных чисел.
Для водной поверхности нам нужна 2х мерная функция шума /9/:
Для интерполяции используем косинусную интерполяцию:
где a,b – два параметра, между которыми мы производим интерполяцию
x - число, от которого зависит результат, если x=0 то возвращается
a, если x=1, то возвращается b
В программе принята следующая система координат: ось (ох) показывает на север, ось (oy) направлена вертикально вверх, ось (oz) направлена на запад.
2.4.1 Солнце
Солнце на сцене является сферой, и задается расстоянием от начала координат(удаленность) радиусом сферы, а также направляющим вектором.
Определение единичного направляющего вектора углового положения Солнца происходит на основе даты, времени, широты и угла между осью Х и направлением на юг. Учитывая, что Земля совершает сложное движение, которое складывается из вращательного движения вокруг своей оси и движения вокруг Солнца по почти круговой орбите, можно получить следующие соотношения для координат искомого вектора /7/:
где
δ – широта,
θ – угол между осью Х и направлением на юг.
Для определения максимальной интенсивности солнца используется следующая формула:
где y –ордината единичного направляющего вектора положения солнца.
Данная формула получена чисто императивно.
2.4.2 Лодка
Рис. 2.9
Лодка задается следующими параметрами: длина, ширина, высота борта, длина носа, высота мачты, ширина и высота паруса (см. рис. 2.9).
Мачта лодки имеет квадратное сечение, с длиной стороны равной
Перемещение лодки определяется по следующей формуле:
где
t - интервал времени между кадрами
Если ветер дует в другую сторону
2.4.3 Водная поверхность
Для водной поверхности можно задавать только цвет воды. На сцене она представлена как бесконечно большой прямоугольник, центр которого находится в точке (0,0,0). На этот прямоугольник накладывается фактура воды.
2.5.1 Сфера
Сфера является одной из наиболее просто аналитически задаваемых объектов. В программе для ее определения хранятся координаты ее центра и длина радиуса.
Задача поиска пересечения луча со сферой достаточно проста и позволяет определить факт отсутствия пересечения на ранних этапах вычисления, что приводит к уменьшению времени выполнения программы и позволяет применять сферу в качестве объемной оболочки объекта, вычисление пересечения луча с которым требует больших вычислительных затрат.
На рис. 2.10 изображена сфера и два пересекающих ее луча, начало одного из которых лежит внутри сферы, а другого – снаружи. Задачу можно рассматривать как плоскую – нахождение пересечения луча с окружностью, в силу того, что через прямую, вдоль которой распространяется луч, и центр окружности, всегда можно провести плоскость, а линия пересечения сферы с плоскостью, проходящей через ее центр, является окружностью с радиусом, равным радиусу самой сферы.
Нахождение точки пересечения луча со сферой
Рис. 2.10
Рассмотрим первый случай, когда начало луча лежит вне сферы – в точке
Иначе находим расстояние от центра сферы до луча – длину отрезка
Из треугольника
Нормаль к поверхности в любой точке сферы вычисляется тривиальным образом как вектор, соединяющий центр сферы с точкой на поверхности.
2.5.2 Треугольник
Треугольник является примитивом, посредством которого могут быть составлены практически любые многогранные тела. Он задается точкой
Треугольник
Рис.2.11 Пересечение луча с плоскостью
Рис. 2.12
Поиск пересечения луча с треугольником состоит из двух этапов: поиск пересечения луча с плоскостью треугольника и определение нахождения точки внутри него.
Первый этап, изображенный на рис. 2.12, достаточно прост; производится проверка, пересекает ли луч плоскость, путем сравнения с нулем скалярного произведения