Математическая основа обратной трассировки лучей 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Математическая основа обратной трассировки лучей



Координаты всех объектов сцены определены в некой глобальной системе координат (в том числе и камеры). После формирования первичного луча создадим подсистему, у которой центр совпадает с точкой выхода луча и ось OZ направлена по лучу. Вычислим матрицу перехода из первой системы координат во вторую. Это позволит просто искать пересечения с треугольником, со сферой, векторы преломления и отражения. При необходимости переводим координаты нужных объектов в новую систему координат и работаем уже в ней. Если необходимо построить вторичный луч, создаем еще одну систему координат, связанную с вторичным лучом, и считаем матрицу для перехода из 2 системы в 3. Чтобы получить матрицу перехода из 1 в 3 необходимо умножить матрицу перехода из 2 в 3 умножить на матрицу перехода из 1 в 2. Таким образом, мы работаем все время в какой-то подсистеме. Нам не надо переводить никакие координаты обратно в глобальную систему. Поэтому не надо и составлять обратную матрицу.


Составление матрицы

Составление матрицы преобразования из текущей системы координат в систему координат, центр которой находится в точке (x, y, z) и ось OZ которой направлена по (dx, dy, dz). Для такого преобразования необходимо:

совершить сдвиг в точку (x, y, z)

совершить поворот вокруг OZ

совершить поворот вокруг OX

 

1. Матрица сдвига: .

 

2. Необходимо совершить поворот вокруг оси OZ по часовой стрелке на угол α.

 

.

Матрица поворота, таким образом, будет равна:

 

 

3. Необходимо совершить поворот вокруг оси OX по часовой стрелке на угол β.

 

.

 

Матрица поворота, таким образом, будет равна:

 

 

Умножив M3 на M2, а результат на M1 получим искомую матрицу перехода:

 

 

Программная реализация

Во многих функциях и процедурах в программе в качестве входных и выходных параметров выступают матрицы. Поэтому в программе введен специальный тип:

 

TMatrix=Array [0..11] of real

 

Это массив из 12 элементов типа real. Он представляет собой последовательно записанные три верхние строчки матрицы. Я не включил последнюю строчку, так как она одинаковая у всех матриц преобразования и равна (0, 0, 0,1).

Для операций над матрицами в программе предусмотрены следующие процедуры:

1. Procedure MatrixAB (var Res: TMatrix; const M1,M2: TMatrix)

Процедура умножает матрицу M1 на матрицу M2 и помещает результат в Res.

2. Procedure ShiftMatrix (var M: TMatrix; Z: real)

Создает матрицу перехода из текущей системы координат в систему координат, сдвинутую по оси OZ на z.

Процедура перемещает систему координат, задаваемую матрицей M, по оси OZ на z.

3. Procedure SetMatrix (var M: TMatrix; dx,dy,dz,x,y,z: real) overload

Создает матрицу перехода из текущей системы координат в систему координат, находящуюся в точке (x,y,z), ось OZ которой направлена по вектору (dx,dy,dz).

4. Procedure SetMatrix (var M: TMatrix; dx,dy,dz: real) overload

Создает матрицу перехода из текущей системы координат в систему координат, ось OZ которой направлена по вектору (dx,dy,dz).

Преобразование координат

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

 

 

Для преобразования точки из одной системы координат в другую в программе существует процедура Trans (const M: TMatrix; var F: TPoint; const V: TPoint).

В V содержатся координаты точки, координаты которой надо преобразовать.

В F содержатся результат.

M - матрица преобразования.

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

Процедура находит координаты вторичного луча в новой системе координат.

Составляет матрицу перехода из текущей системы в систему, связанную с лучом (Li+1).

Умножает матрицы Mi+1=Li+1Mi

Вызывает рекурсивно Ray с параметром Mi+1

 



Поделиться:


Последнее изменение этой страницы: 2020-03-14; просмотров: 92; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.145.95 (0.006 с.)