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

kniga

.pdf
Скачиваний:
224
Добавлен:
17.05.2015
Размер:
29.65 Mб
Скачать

І навпаки, якщо задані декартові координати xE, yE, zE точки E, то можна обчислити відповідні її сферичні координати.

z

zE

 

 

E

 

 

ϕ

ρ

 

 

O

yE

y

xE

θ

 

 

 

x

 

E

 

 

 

 

Рис. 13.4. Сферичні координати точки спостерігача E

Вектор EO задає напрям спостереження. З точки спостереження E можна бачити об’єкти сцени, що знаходяться всередині деякого конуса, вісь якого збігається з EO, а вершина конуса знаходиться в точці E.

Для видової системи координат напрям осі ze збігається з напрямом , додатна піввісь xe направлена вправо, а додатна піввісь ye – вверх

(рис. 13.5).

Отже, система видових координат лівостороння. Таке розміщення осей зручне для комп’ютерної графіки (вісь ze направляється вглиб екрану). Видове перетворення може бути записане в формі

(xe, ye, ze, 1) = (x, y, z, 1) Mv ,

де Mv – матриця видового перетворення розміром 4 × 4.

z ye

E

xe

ze

O y

x

Рис. 13.5. Система видових координат

Для знаходження матриці Mv необхідно здійснити ряд перетворень. 1)Перенесення системи координат так, щоб точка E стала новим по-

чатком координат. Матриця цього перетворення має вигляд

251

 

1

0

0

0

 

 

0

1

0

0

 

T =

 

 

0

0

1

0

 

 

 

 

xE

yE

zE

1

 

2) Поворот системи навколо осі z.

Повернемо систему координат навколо осі z на кут ( π2 θ ) в напрямку

від y до x (від’ємний напрямок). В результаті вісь y збігатиметься з горизонтальною складовою відрізка EO, а вісь x стане перпендикулярною до площини EOE(рис. 13.6).

Матриця повороту системи координат у від’ємному напрямку еквівалентна матриці повороту точки в додатному напрямку, тобто

 

π

 

π

 

0

 

 

 

sinθ

cosθ

0

0

 

 

cos

θ

sin

θ

0

 

2

 

2

 

 

 

 

 

cosθ

sinθ

0

0

 

 

π

 

π

 

0

0

 

 

 

Rz =

sin

θ

cos

θ

 

=

0

0

1

0

.

 

2

 

2

 

 

 

 

 

 

0

 

0

 

1

0

 

 

 

 

 

 

 

 

 

0

0

0

1

 

 

 

 

 

 

 

 

 

 

0

 

0

 

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

z

 

 

z

 

 

 

 

 

 

 

x

E

 

 

y

O

π2 θ

y

x

 

 

 

E

π

 

Рис.13.6. Поворот відносно осі Z на кут (

θ )

 

 

2

 

3) Поворот системи координат навколо осі x. Оскільки нова вісь z повинна збігатися за напрямом із відрізком EO, то повернемо систему координат навколо осі x на кут (π ϕ) у додатному напрямку (рис. 13.7). Це перетворення можна здійснити за допомогою матриці

 

1

0

0

0

1

0

0

0

 

 

0

cos(π ϕ)

sin(π ϕ)

0

 

 

0

cosϕ

sinϕ

0

 

 

 

 

 

Rx

=

0

sin(π ϕ)

cos(π ϕ)

0

 

=

0

sinϕ

cosϕ

0

.

 

 

 

 

 

 

 

0

0

0

1

 

 

0

0

0

1

 

 

 

 

 

 

252

z z

π ϕ E

x

ϕ y

O y

θ

x

E

 

Рис. 13.7. Поворот відносно осі

Урезультаті цього повороту нова вісь z буде направлена вздовж EO.

4)Зміна напрямку осі x. Після трьох перетворень вісі z та y матимуть правильну орієнтацію, а вісь x повинна бути направлена в протилежний

бік, тому необхідно здійснити перетворення x= –x. Матриця цього перетворення має вигляд

1

0

0

0

 

 

0

1

0

0

 

 

 

Myz =

0

0

1

0

.

 

 

 

0

0

0

1

 

 

 

Тоді матриця видового перетворення Mv обчисляється як добуток

Mv = T Rz R х Myz.

Перемножуючи ці матриці, знаходимо

sinθ

cosϕ cosθ

sinϕ cosθ

 

cosθ

cosϕsinθ

sinϕsinθ

Mv =

 

0

sinϕ

cosϕ

 

 

0

0

ρ

0

0 .

0

1

Отже, застосовуючи видове перетворення Mv, одержуємо координати точок об’єкта у видовій системі координат, тобто (xe, ye, ze). Використовуючи ці координати, можемо побудувати ортогональну чи центральну проекцію об’єкта. Значення ze будуть використовуватися для усунення невидимих ліній та граней, наприклад у методі Z-буфера.

13.3. Перспективне проектування

Нам уже відомі координати точок об’єкта (xe, ye, ze) у видовій системі координат. Надалі світові координати вже не будуть використовуватися, тому видові координати (xe, ye, ze) будемо просто позначати через (x, y, z). Якщо картинну площину розмістити перпендикулярно осі z на віддалі c від спостерігача, то координати центральної проекції знахо-

253

дяться за формулами

xc = cxz , yc = cyz

або за допомогою матричного перетворення Pc = P M1 із матрицею M1,

 

 

1 0 0

0

 

 

 

0 1 0

0

 

де

 

 

M1 =

0 0 1 1/ c

.

 

 

 

 

 

0 0 0

0

 

 

 

 

Осі xc, yc, zc мають такий же напрям, що й xe, ye, ze (рис. 13.8).

ye

yc

zc

ze

 

O P(xe, ye, ze)

c

Pc(xc, yc)

xc

Q

 

 

 

E xe

Рис. 13.8. Картинна площина і видові координати

Точка Q(0, 0, c) буде знаходитися в центрі проекції, тобто для точок проекції діапазон координат xc (аналогічно yс) буде містити точку нуль десь посередині цього інтервалу і їх можна нормувати, наприклад так,

щоб xc, yc [–1, 1].

E

с

картинна

ρ

об’єкт

 

 

площина

 

 

Рис. 13.9. Розмір картини і об’єкта

Окрім цього, розмір картини проекції можна підбирати за рахунок відповідного вибору числа c – віддалі між точкою спостереження E і картинною площиною xcQyc.

Грубо кажучи, маємо співвідношення

254

розміркартини

=

розміроб'єкта

,

c

 

ρ

 

яке випливає з подібності трикутників (рис. 13.9), звідки c = ρ розміркартини,

розміроб'єкта

де ρ – віддаль від точки Е до “центру” об’єкта.

Це співвідношення можна застосовувати для оцінки горизонтальних і вертикальних розмірів, а не для точного визначення розмірів, оскільки тривимірний об’єкт може мати складну форму і тоді незрозуміло, що є розміром об’єкта.

Співвідношення довжин горизонтальної та вертикальної сторін (l : h) прямокутної рамки, через яку людина спостерігає за навколишнім світом, визначають кути огляду. Для нормального людського ока горизонтальний кут огляду α 1500, вертикальний кут β 1100 і оптимальна пропорція параметрів рамки l : h = 7,5 : 3.

Для аналізу глибини сцени нам потрібно мати ще й третю координату zc, оскільки різним z відповідають різні zc. Для цього потрібно модифікувати матрицю M1, оскільки перетворення M1 для всіх точок (x, y, z) дає однакове zc = c.

Відобразимо точку z у zc за формулою zc =

z ρ

, тоді точка P(x, y, z)

 

x

 

y

 

z ρ

 

 

z

 

z

ρ

 

z

 

 

 

 

 

 

 

 

 

відобразиться в точку Pc

 

,

 

,

 

, 1

=

x, y,

 

 

,

 

 

. Це

 

z / c

z

c

 

 

z / c

 

 

 

 

 

 

 

 

c

 

перетворення можна задати за допомогою формули

 

 

 

 

 

 

 

 

1

0

 

 

 

 

 

 

 

 

0

1

 

z

ρ

 

z

= (x, y, z, 1)

 

x, y,

 

 

,

 

 

 

0

0

c

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

0

0

 

 

 

 

 

 

 

 

(матриця M1постійна для всіх z). Побудову модифікованої матриці

0

 

0

 

 

0

 

0

 

 

 

 

= (x, y, z, 1) M1

1

 

1

 

 

c

 

c

 

 

ρ / c

0

 

 

 

 

M1можна виконати й іншим спо-

собом: задамо у видовій системі координат дві обмежуючі площини для об’єкта поосі z, тобто площини z = n та z = f (0 < n < f ) (рис. 13.10).

 

z = n

z = f

 

E

Z

–1

1

 

Рис. 13.10. Обмежуючі площини об’єкта

255

Далі відобразимо площину z = n у z = –1, а z = f в z = 1. Будемо шукати матрицю цього перетворення у вигляді

 

1

0

0

0

 

 

0

1

0

0

 

 

 

M1=

0

0

p

q

.

 

 

 

0

0

r

s

 

 

 

Помножимо на неї вектор (x, y,

 

 

1

0

( xc* , yc* , zc* ,1) = (x, y, z, 1)

 

0

1

0

0

 

 

0

0

z, 1), тоді одержимо

0

0

 

0

0

 

p

q

= (x, y, pz + r, qz + s) =

 

r

s

 

 

 

 

 

 

x

 

 

y

 

pz + r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

,

 

 

,

 

 

 

 

 

, 1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qz + s

qz + s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qz + s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Точка

x

повинна відобразитися в

 

x

 

 

, тобто xc =

 

 

x

 

=

 

 

x

.

 

qz + s

z / c

 

qz + s

 

z / c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Звідки знаходимо, що s = 0, q = 1

. При s = 0, q =

1 , yc

=

 

y

 

 

=

y

 

.

qz + s

z / c

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

Далі площину z = n відображаємо в площину z = –1 і одержуємо

співвідношення

 

pn + r

= −1, pn + r = n .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qn + s

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аналогічно площина z = f відображається в площину z = 1. З умов

 

 

 

 

 

 

 

pf + r

=1, pf + r =

 

f

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qf + s

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

знаходимо

 

 

 

 

 

 

 

 

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 f + n

 

 

1

2 fn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p =

, r =

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c f n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c f n

 

 

 

 

 

 

 

 

 

 

 

 

Отже, матриця M1має вигляд

 

 

1

0

 

 

 

 

 

 

0

 

 

 

0

1

 

1 f

0

 

M =

 

0

0

 

+ n

 

 

 

 

 

 

 

 

 

c f

n

1

 

 

 

 

 

 

 

 

 

 

1

 

 

2 fn

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

c

f n

 

 

 

 

 

 

0

0

1c .

0

Зауваження 1. У графічних системах (наприклад, OpenGL) для кожного виду проектування задається піраміда видимості, тобто той об’єм простору, який необхідно відобразити у вікні. На основі цієї ін-

256

формації графічна система створює матрицю проектування. При візуалізації об’єктів координати точок об’єктів спочатку автоматично перемножують на модельно-видову матрицю, а потім – на поточну проекційну матрицю.

13.4. Відображення у вікно виведення

Ми вже здійснили перехід до нових координат – координат проектції (xc, yc). Ці координати можуть бути використані для формування зображення на графічних пристроях виведення, але при цьому необхідно здійснити додаткові перетворення, оскільки система координат у проекційній площині може не збігатися із системою координат пристрою виведення зображення. Наприклад, необхідно зображення, яке вимірюється в метрах (см), зобразити на дисплеї, а на дисплеї одиниці вимірювання – пікселі, тому потрібно перерахувати лінійні одиниці вимірювання в пікселі.

Позначимо

Xmax = max(|xc|), Ymax = max(|yc|),

тоді –Xmax, Xmax, –Ymax, Ymax задають границі проекції сцени (рис. 13.11).

yc

 

yp

 

(Xmax, Ymax)

(c1, c2)

 

xc

xp

(–Xmax, –Ymax)

границі сцени

(–c1, c2) границі області

 

 

виведення

Рис. 13.11. Границі сцени та області виведення

Координати точки (xp, yp) у системі координат області виведення бу-

дуть одержуватися за формулами масштабування

xp = kxxc, yp = kyyc .

Знайдемо kx, ky враховуючи, що координати початку системи координат xp, yp знаходяться в центрі області виведення.

Нехай розміри області виведення 2c1 по горизонталі та 2c2 по вертикалі (в пікселях), тоді

kx =

c1

, ky =

c2

.

 

 

 

X

max

 

Y

 

 

 

max

257

Для перетворення, що зберігає пропорції об’єктів, необхідно вибирати однаковий коефіцієнт розтягу/стиску k для всіх координат, тобто

k = min(kx, ky).

Зауваження 2. Якщо відомі нормалізовані координати проекції xd, yd, то для знаходження xp, yp користуються формулами xp = c1xd, yp = c2yd.

Знайдемо віконні координати точки, виходячи з координат точки в області виведення (xp, yp). Нагадаємо, що область виведення – це прямокутник, в якому (x0, y0) – координати лівого нижнього кута вікна прямокутника (рис. 13.2), а 2c1, 2c2 визначають його розмір (рис. 13.11). Отже, оскільки початок системи координат області виведення знаходиться в точці (x0 + c1, y0 + c2), то віконні координати точки одержуються з коор-

динат області виведення за формулами (див. рис. 13.2):

xw = xp + x0 + c1, yw = yp + y0 + c2.

Зауваження 3. Координати z у віконній системі координат не перетворюються, але будуть у подальшому використовуватися для аналізу глибини сцени.

Контрольні питання та завдання

1.Які системи координат використовують у комп’ютерній графіці?

2.Яке перетворення задається модельною матрицею?

3.Наведіть визначення видової системи координат.

4.Як здійснити видове перетворення?

5.Який вигляд має матриця видового перетворення?

6.Як одержати віконні координати точки?

7.Поясніть як одержати координати об’єкта в системі координат області виведення.

Вправи і задачі для самостійного виконання

1.Задана піраміда ABCD з вершинами A(10; 20; 10), B(20; 20; 10), C(20; 10; 20), D(20; 20; 40). Побудувати перспективу з точками збігу (50; 0; 0), (0; 0; 50).

2.Обчислити координати точки А(10; 20; 30) у видовій системі координат з початком координат у точці (30; 40; 50).

3.Нехай відсікаюче вікно в системі координат xw, yw має координати (xwmin, ywmin) – (xwmax, ywmax). Відобразити його вмістиме в одиничний нормований квадрат. Відображення вмістимого записати у матричному вигляді.

4.Відобразити вмістиме нормованого квадрата в прямокутну область виведення на екрані.

258

Тема 14. Усунення невидимих ліній і граней 14.1. Основні поняття

Задача усунення невидимих ділянок ліній і поверхонь (задача загороджування) – одна з найважливіших та найважчих задач при створенні на комп’ютері якісного реалістичного зображення 3D-об’єктів.

Нехай задано тривимірний об’єкт і видові параметри, що визначають тип проекції та картинну площину. Потрібно визначити, які ребра та грані поверхні об’єкта видимі, якщо на об’єкт дивитися ззовні з деякого центру проектування (для центральних проекцій) або вздовж напрямку проектування (для паралельних проекцій). Виводити на екран необхідно тільки видимі ребра та грані.

Хоча ця задача формулюється просто, однак вона вимагає багато обчислень і машинного часу. Складність цієї задачі привела до появи великої кількості різних методів її розв’язання, в тому числі й апаратних. Але, незважаючи на існування численних методів, не існує універсального алгоритму розв’язання цієї задачі, тобто не існує алгоритму, однаково придатного для різних типів об’єктів та сцен. Натомість розроблені ефективні методи розв’язання окремих класів цієї задачі.

При побудові каркасних зображень (об’єкти в цій моделі задаються сукупністю ребер) використовуються методи усунення невидимих ліній, для візуалізації суцільних тіл (тут об’єкти задаються сукупністю видимих граней) використовуються методи усунення невидимих поверхонь.

Для моделювання процесів у реальному часі потрібні швидкі алгоритми, а для задач мультиплікації потрібні ще й алгоритми, які генерують зображення з тінями, ефектами освітлення тощо. В міру створення швидких алгоритмів можна будувати дедалі більш реалістичні зображення.

Всі алгоритми усунення невидимих ліній та поверхонь містять сортування, тому їх ефективність істотно залежить від ефективності процесу сортування. Застосування до розв’язування задачі загороджування тих чи інших алгоритмів залежить від форми, властивостей та взаємного розташування компонент 3D-сцени. Слід окремо виділити опуклі многогранники (кожна грань опуклого многогранника або повністю видима, або повністю невидима). Якщо об’єкти сцени мають складну форму, то задачу усунення невидимих граней деталізують і спрощують.

Алгоритми усунення невидимих ліній та поверхонь у залежності від вибору системи координат або простору, в якому вони працюють, можна поділити на два класи:

– алгоритми, що працюють у просторі об’єкта на основі аналізу взаєм-

259

ного розташування геометричних фігур. Вони особливо корисні в тих додатках, в яких необхідна висока точність;

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

Існують алгоритми, що почергово працюють в об’єктному просторі та у просторі зображень. Найрозповсюдженішими на практиці методами розв’язування задач усунення невидимих ліній та поверхонь є метод прямого перебирання, метод Z-буфера, метод поточних горизонтів, метод усунення нелицьових граней, метод розбиття картинної площини, алгоритм Робертса, метод аналізу кількісної невидимості точок поверхні, метод сортування за глибиною (алгоритм художника), метод трасування променів та ін. Розуміння суті цих методів лежить в основі роботи з 3Dграфікою навіть при використанні сучасних графічних бібліотек. Кожний алгоритм має свої особливості й обмеження, які слід враховувати при створенні графічних програм.

14.2. Алгоритм поточного горизонту

Алгоритм поточного горизонту найчастіше використовують для усунення невидимих ліній поверхні F(x, y, z) = 0, тобто для побудови графіка функції двох змінних z = f(x, y) у вигляді сітки координатних ліній. Такі задачі виникають в багатьох застосуваннях математики.

Щоб побудувати поверхню, потрібно кожній точці Р(x, y, z) поверхні поставити у відповідність точку картинної площини. Для цього можна використати матрицю аксонометричного проектування.

Для задання напряму вектора проектування, тобто напряму нормалі до картинної площини, потрібно задати два кути ϕ, ψ. Нехай вектор нормалі до картинної площини утворює кут ψ із площиною xy, а проекція нормалі на площину xy із віссю y – кут ϕ (рис. 14.1). Тоді напрям проектування задається вектором

n = (– sinϕ cosψ, – cosϕ cosψ, – sinψ), ϕ [0, 2π], ψ [

π

,

π

].

 

2

 

2

 

Для того, щоб виконати ортогональне проектування поверхні на картинну площину, вісь zнової системи координат xyzповинна збігатися з напрямом проектування (рис. 14.1).

Розглянемо перетворення системи координат xyz у систему xyz. Це перетворення можна здійснити за два кроки.

1) Поворот системи координат відносно осі z на кут ϕ (рис. 14.1) у напрямку від y до x (від’ємний напрям). Оскільки система координат xyz лівостороння, то цей поворот задається матрицею

260

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