Материал: Алгоритмы компьютерной графики. В 3 ч. Ч. 3 (200

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

дается либо уравнениями многоугольников (полигонами), либо координатами вершин или ребер. В этих случаях находится приближенное значение нормали в вершинах. В случае задания уравнений многоугольников приблизительное значение нормали в вершине принимается равным среднему значению нормалей к многоугольникам, примыкающим к данной вершине. На рис. 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 .

Для решения этого уравнения необходимо применить еще одно равенство

nL nR

или

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

Источник: https://studfile.net/preview/16724844/