Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
730.51 Кб
Скачать

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

2.3. Закраска методом Гуро

Если при построении полигональной поверхности для каждой грани (полигона) использовать только одну нормаль, то модель освещения будет создавать изображение, состоящее из отдельных многоугольников. Для сглаживания изображения используются различные методы. Рассмотрим два из них. Самым простым методом является метод Гуро, использующий билинейную интерполяцию интенсивности освещения каждого пиксела сканирующей строки.

Пусть необходимо изобразить многоугольник ABCD (рис. 2.8).

D

A C

P

Q R

B

Рис. 2.8. Закраска методом Гуро

Для этого необходимо определить интенсивность освещения каждого пиксела в сканирующей строке. Интенсивность в вершинах многоугольника определяется с помощью вышеизложенных методов. Для определения интенсивности освещения конкретного пиксела P вначале определяется интенсивность в точках Q и R (точки пересечения сканирующей строки с ребрами многоугольника) с помощью линейной интерполяции:

IQ

uIB

1 u IA , u AQ AB ,

IR

wIC

1 w IB , w BR BC .

Далее можно найти интенсивность освещения в точке P с помощью линейной интерполяции интенсивности освещения в точках Q и R (билинейная интерполяция):

IP tIR 1 t IQ , t QPQR .

26

Для двух пикселов на сканирующей строке:

I P2 t2 IR 1 t2 IQ ,

IP1 t1IR 1 t1 IQ .

Вычитая, получим:

IP2 IP1 t2 t1 IR IQ

IP1

t I .

Данный метод позволяет улучшить качество изображения, но эффект полос Маха еще очень заметен, так как этот метод интерполяции обеспечивает лишь непрерывность значения интенсивности вдоль границ многоугольников, но не обеспечивает непрерывности изменения интенсивности. И изображение все еще выглядит как набор многоугольников.

Еще один недостаток метода (как и следующего) – эффект «гармошки», который проиллюстрирован на рис. 2.9.

nA

nB

nC

nD

 

 

 

nE

A

B

 

 

 

 

 

 

 

C

D

 

 

 

 

 

 

 

 

 

E

Рис. 2.9. «Нежелательные» эффекты закраски Гуро

Если нормали к вершинам B, C, D вычислить предыдущими методами, то они будут одинаково ориентированы и равны. Интенсивность в этих точках будет одинаковой, а следовательно, поверхность будет выглядеть гладкой, плоской и равномерно окрашенной. Хотя на самом деле это не так. Здесь имеется два выхода. Для обеспечения плавного перехода вводятся дополнительные многоугольники (рис. 2.10).

27

 

 

nC

A

B nc

nd D

 

 

C E

Рис. 2.10. Плавный переход закраски в методе Гуро

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

nA

 

 

na

nb

 

А

ne

nE

С

nf

B

D

 

 

E

Рис. 2.11. Резкий переход закраски в методе Гуро

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

Кроме того, метод может привести к ошибкам при изображении невыпуклых многоугольников (рис. 2.12).

28

B

1

D

2

A C

Рис. 2.12. Ошибки при изображении невыпуклых многоугольников

Первая сканирующая строка для определения интенсивности использует вершины A, B и C. Вторая – в одном случае вершины A, B и D, в другом – B, C и D.

2.4. Закраска методом Фонга

Закраска Фонга позволяет разрешить многие проблемы закраски Гуро, в частности, более реалистично выглядят зеркальные блики. При закраске Фонга интерполируется вектор нормали в сканирующей строке. Для этого производится аппроксимация нормали в вершинах многоугольника, а затем с помощью билинейной интерполяции вычисляется нормаль в каждой точке сканирующей строки. Для многоугольника на рис. 2.8:

nQ

unB

1 u nA, u AQ AB ,

nR

wnC

1 w nB , w BR BC ,

nP

tnR

1 t nQ , t QP QR .

И нормаль можно вычислить за счет приращения:

nP2 nP1 t2 t1 nR nQ nP1 t n .

Несмотря на улучшение изображения, метод закраски Фонга имеет те же недостатки, что и метод закраски Гуро (рис. 2.9–2.12) за счет билинейной интерполяции.

29

2.5. Модель Варна

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

В модели Варна направление света от источника можно регулировать независимо от его положения (рис. 2.13).

 

 

нормаль

 

 

 

 

к поверхности

п

 

 

 

 

 

 

 

 

 

 

 

 

R

 

β

θ

θ

α

S

L

 

 

 

 

 

 

 

вектор

направление света

наблюдения

 

Рис. 2.13. Модель Варна

Такая модель годится как для направленных, так и для точечных источников света. Интенсивность света от направленного источника света в модели Варна:

I I cosc β k

d

cosθ

k

s

cosn α ,

1

 

 

 

где с – степень, определяющая пространственную концентрацию направленного источника света. При большом значении c моделируется узкий луч прожектора, а при малом – заливающий свет (аналогично функции n – степени пространственного распределения зеркально отраженного света (см. рис. 2.4)).

Варн для создания спецэффектов (как и в фотостудиях) использует заслонки (рис. 2.14) и конусы (рис. 2.15).

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]