дается либо уравнениями многоугольников (полигонами), либо координатами вершин или ребер. В этих случаях находится приближенное значение нормали в вершинах. В случае задания уравнений многоугольников приблизительное значение нормали в вершине принимается равным среднему значению нормалей к многоугольникам, примыкающим к данной вершине. На рис. 2.5 показан вид сверху усеченной пирамиды.
V8 |
|
|
P3 |
|
|
V7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
V4 |
|
V3 |
|
|
|
P4 |
|
P0 P2 |
|
|
|
|
|
V1 |
|
V2 |
|
|
|
|
|
|
|
|
|
|
|
|
P1 |
|
|
|
|
|
|
|
|
|
|
V5 |
|
|
|
V6 |
||
Рис. 2.5. Определение нормали к поверхности
Приближенное значение нормали в вершине V1 будет равно: nv1 = (a0+a1+a4)i + (b0+b1+b4)j +(c0+c1+c4)k,
где a, b и c – коэффициенты уравнений плоскостей трех многоугольников P0, P1 и P4, окружающих вершину V1, а i, j и k – единичные векторы декартовой системы координат.
Если известны только уравнения ребер, то приблизительную нормаль к вершине можно определить, усредняя попарные векторные произведения всех ребер, примыкающих к данной вершине. Для вершины V1 это выглядит следующим образом:
n V V V V V V V V V V V V . |
||||||||||||||
|
V |
1 |
2 |
1 |
4 |
1 |
5 |
|
1 |
2 |
1 |
4 |
1 |
5 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Далее приведем пример приближенного вычисления нормали [1]. |
||||||||||||||
Рассмотрим |
полигональную |
поверхность, |
|
изображенную на |
||||||||||
рис. 2.5. Пусть координаты вершин будут следующими: |
|
|||||||||||||
V1 |
(–1, –1, 1) |
V2 |
(1, –1, 1) |
V3 |
(1, 1, 1) |
|
V4 |
(–1, 1, 1) |
||||||
V5 |
(–2, –2, 0) |
V6 |
(2, –2, 0) |
V7 |
(2, 2, 0) |
|
V8 |
(–2, 2, 0) |
||||||
|
|
|
|
|
|
|
21 |
|
|
|
|
|
|
|
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Уравнения для плоскостей граней P0, P1 и P4 в данном случае:
P0: |
z – 1 |
= 0 |
P1: |
–y + z |
= 0 |
P4: –x + z – 2 = 0
Приближенная нормаль в точке V1, найденная первым способом, будет равна:
nv1 = (a0+a1+a4)i + (b0+b1+b4)j +(c0+c1+c4)k = – i – j + 3k .
Абсолютная величина нормали nv1 :
|
1 2 |
1 2 |
3 2 |
|
|
|
n1 |
11 , |
|||||
а единичная нормаль:
|
n1 |
|
|
0.3i 0.3j 0.9k . |
|
n1 |
|
|
|
|
|
|||
|
|
|
|
При нахождении приближенной нормали вторым способом получим:
V1V2 V1V4 4k,
V1V5 |
V1V2 |
2j 2k, |
V1V4 |
V1V5 |
2i 2k. |
Усредняя векторные произведения, получим значение: nv1 = – 2i – 2j + 8k.
Абсолютная величина нормали nv1 (по второму способу):
|
2 2 |
2 2 |
8 2 |
|
|
n1 |
72 , |
||||
а единичная нормаль:
|
n1 |
|
|
0.24i 0.24j 0.94k . |
|
n1 |
|
|
|
|
|
|||
|
|
|
|
Таким образом, приблизительные нормали, полученные разными способами, различаются как по величине, так и по направлению.
22
И, следовательно, интенсивность освещения в каждой точке сцены (так же как и сама сцена) будет зависеть от способа вычисления приблизительных нормалей.
2.2.5. Определение вектора отражения
Рассмотрим три наиболее общих метода определения вектора отражения.
В простом случае, когда применяется только один точечный источник освещения, вектор падения света, нормаль к поверхности и вектор отраженного света лежат в одной плоскости, причем на этой плоскости угол падения равен углу отражения (рис. 2.6).
Y
|
ˆ |
|
R |
θ |
X |
θ |
|
свет |
nˆ |
|
|
Z |
|
ˆ |
а |
L |
|
Рис. 2.6. Определение вектора отражения
Предполагается, что свет падает вдоль оси Z и точка поверхности совпадает с началом системы координат (предварительно необходимо развернуть систему координат так, чтобы направление на источник света и ось Z совпадали, и перенести ее начало в точку поверхности). Тогда проекция нормали и вектора отражения на плоскость XY будет лежать на одной прямой (рис. 2.7):
ˆ |
|
nˆx |
|
Rx |
|
, |
|
ˆ |
|
ˆ |
|
Ry |
|
||
|
ny |
||
|
23 |
|
|
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
ˆ ˆ |
– x- и y-составляющие единичных векторов отраже- |
где Rx , Ry , nˆx , nˆ y |
ния и нормали. Если обозначить угол между единичным вектором нормали и осью Z как θ , то составляющие вектора нормали по оси Z:
nˆz cosθ, 0 θ |
2 , |
а составляющая вектора отражения по оси Z:
ˆ |
cos 2 2cos |
2 |
1 2nˆz |
1. |
Rz |
|
Y
ˆ
R
nˆ
X
Рис. 2.7. Проекция нормали и вектора отражения на плоскость XY
Далее из выражений
ˆ 2 |
ˆ 2 |
ˆ 2 |
1 |
и |
ˆ2 |
ˆ2 |
ˆ2 |
1 |
Rx |
Ry |
Rz |
nx |
ny |
nz |
|||
получаем: |
|
|
|
|
|
|
|
|
|
ˆ |
2nˆz nˆy , |
|
ˆ |
2nˆz nˆx . |
|
||
|
Ry |
Rx |
|
|||||
Если есть несколько источников освещения и их можно перенести и повернуть так, чтобы нормаль к поверхности падала вдоль оси Z, то плоскость XY будет касательной к поверхности, а X и Y-составляющие единичных векторов падения и отражения будут иметь разные знаки. Z-составляющие будут, естественно, равны. Чтобы получить результаты в первоначальной ориентации, необходимо выполнить обратное преобразование. В перемещенной и повернутой системе координат:
24
ˆ |
ˆ |
, |
ˆ |
ˆ |
, |
ˆ |
ˆ |
Rx |
Lx |
Ry |
Ly |
Rz |
Lz . |
В третьем методе учитывается, что единичная нормаль, единичный вектор паления, единичный вектор отражения лежат в одной плоскости, и векторное произведение
|
|
n L |
R n, |
|
|
или |
|
|
|
|
|
ny Lz |
nz Ly i |
nz Lx |
Lz nx j |
nx Ly |
Lx ny k |
nz Ry |
ny Rz i |
nx Rz |
nz Rx j |
ny Rx |
nx Ry k. |
Векторные произведения равны, если равны x- y- и z-составляющие:
nz Ry |
ny Rz |
nz Ly |
ny Lz , |
nz Rx |
nx Rz |
nx Lz |
nz Lx , |
ny Rx |
nx Ry |
ny Lx |
nx Ly . |
Для решения этого уравнения необходимо применить еще одно равенство
n
L n
R
или
nx Rx ny Ry nz Rz nx Lx ny Ly nz Lz .
Матричный вид для всех уравнений:
0 |
nz |
ny |
Rx |
nz Ly |
ny Lz |
||
nz |
0 |
nx |
nx Lz |
nz Lx |
|||
Ry |
|||||||
ny |
nx |
0 |
ny Lx |
nx Ly |
|||
Rz |
|||||||
nx |
ny |
nz |
nx Lx |
ny Ly nz Lz |
|||
|
|||||||
или
[N][R] = [B].
25