Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Pereki programowania
gier. Vademecum
profesjonalisty. Tom 1
Autor: Mark DeLoura
Tumaczenie: Rafa Joca
ISBN: 83-7197-704-2
Tytu oryginau: Game Programming Gems
Format: B5, stron: 638
W niniejszej ksice znajdziesz poczon wiedz ponad 40 utalentowanych twrcw
gier. Wsppracujc, stworzyli zbir wskazwek dotyczcych programowania gier, dziki
ktremu uzupenisz swoj wiedz. Jeli zaimplementujesz zaprezentowane tutaj techniki
(wypracowywane przez wiele godzin), wrogowie bd sprytniejsi, bohater pynnie powali
przeciwnikw, a gracze z powodu wysoce realistycznego trjwymiarowego wiata bd
si bali zgasi wiato w nocy.
Niezalenie od tego, czy pytali mnie o nowinki techniczne wprowadzone w nowej konsoli,
czy o zoone algorytmy, jedna rzecz stawaa si dla mnie jasna: cigle zadajemy
pytania. Jako programici gier czsto nie wiemy, jak wykona postawione przed nami
zadanie. Moe wanie dlatego tak bardzo lubimy t prac! Co masz jednak zrobi, gdy
przytrafi Ci si opisana sytuacja? Przeszukasz domow biblioteczk lub zasoby sieci
WWW? A moe zajrzysz do archiwalnych numerw fachowych czasopism? aden
twrca gier nie korzysta z jednego okrelonego rda. Czy nie byoby wspaniale, gdyby
jednak istniao takie miejsce, do ktrego zawsze zajrzysz w pierwszej kolejnoci?
Wanie w tym celu napisalimy ksik, ktr trzymasz w rce.
Rozdziay ksiki obejmuj wiele problemw technicznych, na ktre moesz si natkn,
piszc gr. Znajdziesz ogromn liczb szczegowo omwionych technik, ale i kilka
bardziej oglnych rozdziaw. Zadaniem ksiki jest zwikszenie Twojego stopnia
zaawansowania niezalenie od aktualnej wiedzy, jak posiadasz. Na przykad w bardziej
oglnych rozdziaach opisujemy techniki, nie zagbiajc si w szczegy; na ich
omwienie czas przychodzi pniej. Dobrymi przykadami mog by rozdziay
o kwaternionach oraz cz dotyczca algorytmw sztucznej inteligencji.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
5RKUVTGEK
Rozdzia 1.0
!
Zasada 1.: Podstawy .............................................................................................................. 23
Zasada 2.: Cakowite minimum............................................................................................. 23
Zasada 3.: Twrz elastyczne algorytmy ................................................................................ 24
Zasada 4.: Do sterowania przebiegiem wykorzystuj skrypty................................................ 24
Zasada 5.: Gdy dobre skrypty staj si zymi........................................................................ 25
Zasada 6.: Unikaj duplikacji danych ..................................................................................... 26
Zasada 7.: Kreuj narzdzia, ktre tworz dane...................................................................... 26
Wnioski ................................................................................................................................. 27
Rozdzia 1.1
"#
$
%
Styl programowania............................................................................................................... 30
Projektowanie klas................................................................................................................. 32
Projektowanie hierarchii klas ................................................................................................ 33
Wzorce projektowania........................................................................................................... 33
Podsumowanie....................................................................................................................... 39
Rozdzia 1.2
!&"
!"
!!
&
'
Cig Fibonacciego ................................................................................................................. 41
Silnia...................................................................................................................................... 43
Trygonometria ....................................................................................................................... 44
Kompilatory w rzeczywistym wiecie................................................................................... 45
Jeszcze raz trygonometria...................................................................................................... 45
Szablony i standard C++ ....................................................................................................... 46
Macierze ................................................................................................................................ 46
Podsumowanie....................................................................................................................... 51
Rozdzia 1.3
( !"
&
!
Definicja ................................................................................................................................ 55
Zalety..................................................................................................................................... 55
Problem ................................................................................................................................. 56
Tradycyjne rozwizanie......................................................................................................... 56
Lepszy sposb ....................................................................................................................... 56
Jeszcze lepszy sposb............................................................................................................ 57
Rozdzia 1.4
)*!
&+,
%
Rodzaje elementw w STL ................................................................................................... 59
Podstawowe pojcia dotyczce biblioteki STL..................................................................... 60
Wektory ................................................................................................................................. 61
Listy....................................................................................................................................... 63
Kolejki dwukierunkowe ........................................................................................................ 66
Mapy...................................................................................................................................... 67
Stosy, kolejki i kolejki priorytetowe ..................................................................................... 70
Podsumowanie....................................................................................................................... 71
Rozdzia 1.5
&
!
-$.!
-
"$
Wymagania............................................................................................................................ 73
Platformy sprztowe i programowe....................................................................................... 74
Pierwsze rozwizanie ............................................................................................................ 74
Drugie rozwizanie................................................................................................................ 75
Poowa rozwizania............................................................................................................... 77
Sposoby wywoywania funkcji ............................................................................................. 77
Wywoywanie funkcji ........................................................................................................... 79
Uzupenianie rozwizania ..................................................................................................... 80
Wnioski ................................................................................................................................. 83
Rozdzia 1.6
&
!! .
!
"#! "# /
Metoda................................................................................................................................... 86
Klasa Handle ......................................................................................................................... 87
Klasa HandleMgr .................................................................................................................. 87
Przykad uycia ..................................................................................................................... 89
Uwagi .................................................................................................................................... 89
Rozdzia 1.7
0 .
". %
Klasa zasobw ....................................................................................................................... 97
Klasa menedera zasobw................................................................................................... 100
Jak dziaaj uchwyty............................................................................................................ 102
Moliwe modyfikacje i rozszerzenia................................................................................... 103
Wnioski ............................................................................................................................... 104
Rozdzia 1.8
" !"!!
!"#
Wczeniej przetwrz dane................................................................................................... 105
Zapisywanie danych ............................................................................................................ 106
Prosty sposb wczytywania danych .................................................................................... 107
Bezpieczniejsze wczytywanie danych................................................................................. 107
Rozdzia 1.9
! &
&"!&
Przewidywalne liczby losowe ............................................................................................. 153
Alternatywne algorytmy...................................................................................................... 155
Algorytmy dla nieskoczonych wszechwiatw................................................................. 156
Wnioski i wskazwki .......................................................................................................... 158
Rozdzia 2.1
!
& "$ 1
Zalene od czstotliwoci generowania klatek agodne zakoczenie ruchu
z wykorzystaniem liczb zmiennoprzecinkowych............................................................. 161
Zalene od czstotliwoci generowania klatek agodne zakoczenie ruchu
z wykorzystaniem liczb cakowitych ............................................................................... 162
Interpolacja liniowa niezalena od czstotliwoci generowania klatek ................................. 163
agodne rozpoczcie i zakoczenie ruchu
niezalene od czstotliwoci generowania klatek ............................................................ 164
Niebezpieczestwa .............................................................................................................. 165
Rozdzia 2.2
2
3"#" !
1%
Kinematyka przesunicie i obrt .................................................................................... 169
Dynamika sia i moment obrotowy ................................................................................ 172
Dodatkowe waciwoci ciaa sztywnego ........................................................................... 173
Cakowanie rwna ruchu................................................................................................... 176
Rozdzia 2.3
!&*
-
"$!
!"
!"#&
%
Wielomiany ......................................................................................................................... 180
Dziedzina i przeciwdziedzina.............................................................................................. 181
Wielomiany parzyste i nieparzyste...................................................................................... 184
Szereg Taylora..................................................................................................................... 185
Skrcony szereg Taylora ..................................................................................................... 189
Szereg Lagrangea ............................................................................................................... 190
Radzenie sobie z niecigociami........................................................................................ 193
Wnioski ............................................................................................................................... 194
Rozdzia 2.4
&
45&"
!!
$
"
6& %
Stabilno a problem cakowania pocztkowej wartoci .................................................... 195
Metoda jawna Eulera........................................................................................................... 196
Metoda niejawna Eulera ...................................................................................................... 197
Niedokadno ..................................................................................................................... 199
Znajdowanie niejawnych rozwiza ................................................................................... 199
Wnioski ............................................................................................................................... 199
Rozdzia 2.5
7 8&9 $
Zasada dziaania .................................................................................................................. 201
Przykad............................................................................................................................... 203
Zastosowania ....................................................................................................................... 204
Rozdzia 2.6
:
!
!& "$ "#
!
Dwuwymiarowe rwnanie fali ............................................................................................ 205
Warunki brzegowe wyspy i wybrzea............................................................................ 207
Kwestie implementacyjne ................................................................................................... 208
Interakcja z powierzchni.................................................................................................... 209
Rendering ............................................................................................................................ 210
Rozdzia 2.7
;
!
Myl o kwaternionach jako zastpcach macierzy ............................................................... 213
Dlaczego po prostu nie uy ktw Eulera?........................................................................ 214
Co reprezentuj X, Y, Z i W?.............................................................................................. 214
Jakie jest podoe matematyczne caego zagadnienia? ....................................................... 215
Jak kwaterniony reprezentuj obroty?................................................................................. 216
Rozdzia 2.8
;
$ "<
%
Obrt kwaternionu............................................................................................................... 219
Konwersja kwaternionu na macierz .................................................................................... 220
Konwersja z macierzy na kwaternion.................................................................................. 221
Rozdzia 2.9
:
& "$
Rachunek kwaternionowy ................................................................................................... 225
Interpolacja kwaternionw .................................................................................................. 226
Przykadowy kod ................................................................................................................. 228
Wyprowadzenie 2.9.1: Wzr dla slerp ................................................................................ 228
Wyprowadzenie 2.9.2: uzyskanie formy potgowej slerp................................................... 231
Wyprowadzenie 2.9.3: interpolacja krzywymi sklejanymi ................................................. 232
!"
Rozdzia 3.0
$
&
*!"
"#
"
$
&
"$ '
Sterowanie zdarzeniami kontra odpytywanie obiektw...................................................... 242
Koncepcja komunikatu........................................................................................................ 242
Automaty stanw................................................................................................................. 243
Automat stanw sterowany zdarzeniami w postaci komunikatw...................................... 243
Czas si przyzna ................................................................................................................ 246
Jeszcze jedno mae przyznanie si ...................................................................................... 246
Klocki automatu stanw ...................................................................................................... 247
Przekazywanie komunikatw do i z automatu stanw........................................................ 247
Wysyanie komunikatw ..................................................................................................... 248
Wysyanie opnionych komunikatw ............................................................................... 249
Usuwanie obiektu gry.......................................................................................................... 250
Udoskonalenie okrelenie zakresu komunikatu ............................................................. 250
Udoskonalenie dziennik wysyanych komunikatw i zmian stanw ............................. 251
Udoskonalenie zamiana automatw stanw................................................................... 252
Udoskonalenie kilka automatw stanw ........................................................................ 252
Udoskonalenie kolejka automatw stanw .................................................................... 252
Skrypty zachowania poza kodem ........................................................................................ 253
Wnioski ............................................................................................................................... 253
Rozdzia 3.1
Rozdzia 3.2
Rozdzia 3.3
!(>!"."&
Problem ............................................................................................................................... 275
Oglne omwienie rozwizania .......................................................................................... 275
Waciwoci A*................................................................................................................... 277
Zastosowanie A* do planowania drogi w grach.................................................................. 277
Saboci algorytmu A* ........................................................................................................ 282
Inne rozszerzenia ................................................................................................................. 282
Rozdzia 3.4
"
Rozdzia 3.5
Rozdzia 3.6
)"
!"#$! $
$
!*!"
"!$
!"#
W duym skrcie................................................................................................................. 305
Konstrukcja ......................................................................................................................... 307
Ruszmy si .......................................................................................................................... 307
Dostanie si tam to poowa zabawy .................................................................................... 310
Dziaa, ale nie najlepiej ....................................................................................................... 312
Wnioski ............................................................................................................................... 313
Rozdzia 3.7
(& !
9 "#
!& "$ "#
Implementacja ..................................................................................................................... 323
Kod ...................................................................................................................................... 325
Ograniczenia i moliwe udoskonalenia............................................................................... 327
Podzikowania i materiay .................................................................................................. 332
Rozdzia 3.8
Rozdzia 3.9
!"
!"#
'
Biologiczna analogia ........................................................................................................... 343
Zastosowanie w grach ......................................................................................................... 344
Sieci neuronowe .................................................................................................................. 345
Czysta logika Mr. Spock ................................................................................................ 350
Klasyfikacja i rozpoznawanie obrazw ........................................................................... 353
Algorytm Hebba .................................................................................................................. 356
Sie Hopfielda ..................................................................................................................... 358
Wnioski ............................................................................................................................... 361
#
$
%
&
%'& !(!
Rozdzia 4.0
Rozdzia 4.1
)&
4"
"#
Zapoznanie z macierz rzutowania ..................................................................................... 373
Dopracowywanie wartoci gbi ......................................................................................... 374
Wybr odpowiedniego epsilona .......................................................................................... 374
Implementacja ..................................................................................................................... 375
Kod rdowy ...................................................................................................................... 376
Rozdzia 4.2
7
Wprowadzenie do wektorowej kamery ............................................................................... 378
Optymalizacja lokalnej przestrzeni ..................................................................................... 379
Wnioski ............................................................................................................................... 381
Rozdzia 4.3
+"#
.
/
Prosta kamera z widokiem z pierwszej osoby..................................................................... 383
Kamera oparta na skryptach ................................................................................................ 385
Sztuczki z kamer................................................................................................................ 388
Rozdzia 4.4
Rozdzia 4.5
7!!
3$! $
'
Algorytmy ........................................................................................................................... 401
Wykrywanie zderze na podstawie kul otaczajcych obiekty ............................................ 402
Wykrywanie zderze trjktw........................................................................................... 403
Rozdzia 4.6
7&&"4" !
!
$"$3 '
Siatki.................................................................................................................................... 413
Problemy z rnorodnoci rozmiarw obiektw............................................................... 413
Wielorozdzielczociowe mapy............................................................................................ 415
Kod rdowy ...................................................................................................................... 415
Rozdzia 4.7
&"
& 4" '
Problem ............................................................................................................................... 421
Opis algorytmu .................................................................................................................... 422
Zastosowania ....................................................................................................................... 424
Rozdzia 4.8
)
"
!"# '%
Usuwanie obiektw poza obszarem widocznoci ............................................................... 430
Usuwanie zakrytych obiektw ............................................................................................ 431
Podsumowanie..................................................................................................................... 433
Rozdzia 4.9
Rozdzia 4.10 ;
"$!"# ''
Drzewa semkowe .............................................................................................................. 445
Dane drzewa semkowego .................................................................................................. 446
Tworzenie drzewa ............................................................................................................... 447
Nachodzenie na siebie wieloktw ..................................................................................... 448
$
Ssiedzi................................................................................................................................ 448
Zastosowania ....................................................................................................................... 449
Wnioski ............................................................................................................................... 449
Rozdzia 4.16 ?
&!"
" "!! '%
Krajobrazy ........................................................................................................................... 491
Budynki ............................................................................................................................... 496
Algorytm tworzenia nazw ................................................................................................... 499
=! !-&
-&
Podejcie.............................................................................................................................. 517
Implementacja ..................................................................................................................... 518
Kod rdowy ...................................................................................................................... 520
Rozdzia 5.1
Rozdzia 5.2
!"
4&
$."
4&
!!
Tradycyjne statyczne owietlenie........................................................................................ 527
Statyczne owietlenie bazujce na motywach..................................................................... 530
Wnioski ............................................................................................................................... 536
Rozdzia 5.3
Rozdzia 5.4
!
'
Omwienie .......................................................................................................................... 545
Porwnanie map zaniku z mapami owietlenia................................................................... 549
Efekty CSG.......................................................................................................................... 549
Mga bazujca na zasigu.................................................................................................... 549
Inne ksztaty......................................................................................................................... 550
Wnioski ............................................................................................................................... 550
Rozdzia 5.5
0
!!
"$
!"#!
Prosta animacja wsprzdnych tekstury............................................................................. 552
Rzutowanie tekstury ............................................................................................................ 552
Odwzorowywanie odbi...................................................................................................... 554
Rozdzia 5.6
4"
Jak naoy map nierwnoci na obiekt?........................................................................... 558
Dobr przestrzeni dla normalnych ...................................................................................... 558
Inne rozwizanie uywanie mapowania nierwnoci w przestrzeni stycznej................ 559
Rozwizanie mapowanie nierwnoci w przestrzeni tekstury ....................................... 562
Problemy w przestrzeni tekstury ......................................................................................... 563
Wnioski ............................................................................................................................... 564
%
Rozdzia 5.7
2
$ 1
Matematyka cienia............................................................................................................... 565
Implementacja ..................................................................................................................... 567
Udoskonalenia ..................................................................................................................... 569
Rozdzia 5.8
2
*
!"# "#&"
" "!!
Wprowadzenie..................................................................................................................... 571
rdo wiata, obiekt blokujcy i otrzymujcy .................................................................. 572
Cele tego rozdziau .............................................................................................................. 573
Tworzenie mapy cienia........................................................................................................ 574
Rzutowanie mapy cienia na obiekcie otrzymujcym .......................................................... 580
Rendering obiektw odbierajcych ..................................................................................... 581
Rozszerzenia i usprawnienia podstawowego algorytmu..................................................... 582
Rozdzia 5.9
)&
4 9!
5
!*!""4
$ -&
!
"!
@
& /
Pierwsze bdne zaoenie................................................................................................... 586
Drugie bdne zaoenie ...................................................................................................... 588
Wnioski ............................................................................................................................... 588
Podzikowania..................................................................................................................... 588
DodatekB
C& !4&
1
DodatekC
C& - 1%
1%
Rozdzia 4.5
Mechanizm fizyki dziaajcy w czasie rzeczywistym jest najwaniejszym elementem, dziki
ktremu mona tworzy trjwymiarowe rodowiska, na widok ktrych gracz po prostu
krci gow z niedowierzaniem. Mechanizm symulacji fizyki zapewnia realistyczn interakcj obiektw. Wtedy gracz czuje realizm przedstawionego wiata, a co za tym idzie,
moe lepiej si po nim porusza, poniewa zachowuje si podobnie do tego, do czego
jest przyzwyczajony w realnym wiecie. Pierwszym i najwaniejszym krokiem przy tworzeniu realistycznej symulacji fizyki jest dokadne wykrywanie zderze; gdy ju zostanie
jakie wykryte, symulacja moe odpowiednio zadziaa. W tym rozdziale uoymy podwaliny pod tworzenie perfekcyjnej symulacji fizyki, omawiajc najwaniejszy jej fragment, czyli wykrywanie zderze w trjwymiarowej przestrzeni.
W rozdziale zajmiemy si dwoma algorytmami detekcji zderze:
Wykrywanie zderze na podstawie kul otaczajcych obiekty. Uywamy ich,
poniewa kod jest stosunkowo prosty, a wyjanienie zasad dziaania nie nastrcza
wikszych problemw. W zasadzie kod sprawdza zderzenia, testujc promie
jednej kuli z promieniem drugiej.
Wykrywanie zderze na podstawie przeci trjktw. W tym przypadku, zanim
Wykrywanie zderze najlepiej przeprowadza w hierarchicznych krokach: dla kul otaczajcych obiekty, nastpnie dla kul otaczajcych wieloboki, a na kocu wykorzysta przenikanie trjktw. Liczenie kul otaczajcych obiekty jest bardzo proste; musisz znale
rodek obiektu, nastpnie policzy maksymaln odlego midzy rodkiem a wierzchokiem obiektu. Przechowujc promie kadej otaczajcej kuli, moesz przeprowadza
test zderzenia, dodajc promienie i sprawdzajc je z odlegoci rodkw obiektw. Jeli
suma jest wiksza ni odlego rodkw, kule nie przenikaj si.
Przejdmy przez to krok po kroku. Najpierw musimy okreli rodek siatki. Jedna z metod
uywa prostopadocianu otaczajcego obiekt i liczy rodek przektnej tej bryy (rysunek 4.5.1). Aby okreli prostopadocian, musimy pozna maksymalne i minimalne
wartoci x, y i z dla caego obiektu. Mona to wykona, przechodzc przez wszystkie
wierzchoki i sprawdzajc aktualne maksimum i minimum. Po sprawdzeniu wszystkich wierzchokw otrzymamy minimalny prostopadocian, ktry otoczy obiekt.
Znajdowanie rodka
Dla prostopadocianu z omioma punktami (ABCDEFGH, patrz rysunek 4.5.2) przypomnijmy sobie uoenie wierzchokw
Tworzenie
prostopadocianu
otaczajcego obiekt
'
+,
,
, ..,. /
.
.
,.
/
..,. /
Promie otaczajcej obiekt kuli mona atwo obliczy, przechodzc przez kolejne
wierzchoki i znajdujc odlego midzy wierzchokiem i rodkiem obiektu. Jeli uzyskana odlego jest wiksza od aktualnego maksimum, zastpujemy maksimum uzyskan
wartoci. Po sprawdzeniu wszystkich wierzchokw maksymalna odlego jest promieniem kuli (oczywicie dosy naturaln optymalizacj jest liczenie pierwiastka kwadratowego dopiero na kocu).
"012
"(3&+ 45 ,
4
5 , 45 "6 45 ,
4
5 , 45
"706*8196:*;
&%"<"012<6"6:&. 9/
=&%"<"012<6><"012<6
<"012<6&%"<"012<6/
?
:&.$@(3&<"012<6/
Przedstawiana metoda wykrywania zderze dwch trjktw nie jest trudna do zrozumienia, ale wykorzystuje pewn matematyczn sztuczk. Wyobra sobie, e mamy dwa
trjkty w trjwymiarowej przestrzeni (patrz rysunek 4.5.3). O obydwu musimy zebra
pewn ilo informacji. Dla jednego z nich musimy wyznaczy rwnanie paszczyzny, na
ktrej si znajduje. Jeli masz dobr pami, to zapewne wiesz, e ma ono posta: Ax +
By + Cz + D = 0. A, B, C i D okrelimy, liczc iloczyn wektorowy wierzchokw.
'(&&')&&6*81 :*
9*&A : */
9*&A9 9 *((<99 /
&6
6&
99
&.:4&.&.*4&.
9&.:4&./
9 &.*4&./
Dwa przecinajce si
trjkty
B7($)2&%7
261(
*8"
*8$1(*
'"
0'$*86%'(.B
(%'
"*
6&6
99 6&
*((<99 ((C%*&9 9 /
(&6
&6&*,
,,D
&.$*((<99 ./
&.$
*((<99 .
/
&.$*((<99 ./
E
(&
6,
,,D :
:"*
2
F"$%&CD
D D'(&$%&6":%
*((<99 .
*((<99 .
*((<99 .
4GD4
G
D4GD
&.$4&C%*&*((<99 C/
Mamy ju rwnanie paszczyzny pierwszego trjkta () i moemy przej do nastpnego etapu: sprawdzania, czy drugi trjkt () koliduje z paszczyzn . Jest to
wykonywane w kilku krokach. Gwna idea opiera si na tym, e midzy dwoma wierzchokami prowadzimy lini i sprawdzamy, czy przecina ona paszczyzn . Jeli
punkt kolizji znajduje si midzy tymi dwoma wierzchokami, przecina paszczyzn ; jeli nie znajduje si miedzy wierzchokami, przechodzimy do nastpnych
dwch linii tworzcych , aby sprawdzi, czy przypadkiem tam nie wystpuje kolizja.
Przecicie linia-paszczyzna rozwizujemy, uywajc rwna parametrycznych. Dla
danych wierzchokw a(x0,y0,z0) i b(x1,y1,z1), tworzymy rwnanie a(x0,y0,z0) t =
b(x1,y1,z1) (1 t), gdzie t to wspczynnik interpolacji zmieniajcy si od 0 do 1.
Gdy t=0 jeste w punkcie b, gdy jest rwne 1 w a. Jeli wstawimy te rwnania parametryczne do rwnania paszczyzny, bdziemy mogli policzy t.
A(x0t + x1 (t 1)) + B(y0t + y1(1 t)) + C (z0t + z1(1 t)) + D = 0
Po przeksztaceniach otrzymamy:
t = (Ax1 + By1 + Cz1 + D)/(A(x0 x1) + B(y0 y1) + C(z0 z1))
Oto kod obliczajcy t:
DGD,
G
D,GD
D&4>$G4>,&4>$
G4>
,&4>$G4>/
G,
G
,G
&4>$G:4>,&4>$
G:4>
,&4>$G:4>/
H%&'%67'7"6"$$.0
D
="<&4,&4>$D4/
H6(&6="<&=%*'
:
&
2$%&$*#*
="<4>G="<&,:4>G4="<&/
="<
4>
G="<&,:4>
G4="<&/
="<4>G="<&,:4>G4="<&/
W ten sposb otrzymujemy punkt, w ktrym linia przecina paszczyzn (rysunek 4.5.4).
Oczywicie warto t, ktr obliczymy, musi si znajdowa w przedziale 0 1; w przeciwnym przypadku przecicie nie znajduje si midzy wierzchokami! Szczeglny przypadek, na ktry musisz zwrci uwag w tym kroku, to wystpienie pionowych linii.
Najszybsz metod okrelenia przecicia linii jest wstawienie x i z dla obydwu punktw
(a i b) do rwnania paszczyzny trjkta i obliczenie y. Wtedy punktem przecicia bdzie
punkt (a.x, obliczony.y, a.z).
Okrelanie
punktu przecicia
(
Rzutowanie
wierzchokw
)
Okrelanie obszaru
zajmowanego przez
trjkt
kierunku co rodek trjkta. Jeli tak rzeczywicie jest, punkt znajduje si wewntrz trjkta wzgldem linii ab. Musimy to jeszcze powtrzy dla linii bc i ca. Jeli w kadym
tecie dowiedzielimy si, e punkt znajduje si w rodku trjkta, rzeczywicie tak jest.
Naley jednak bra pod uwag szczeglny przypadek: rzutowanie pionowej linii. Za pomoc y=mx+b nie moesz narysowa takiej linii. Jeli wystpi taka sytuacja, sprawdzasz
wsprzdn x zamiast y; to znaczy, e najpierw okrelasz, po ktrej stronie pionowej
linii znajduje si wewntrzny punkt. Nastpnie sprawdzasz warto x rzutowanego punktu
przecicia. Jeli jest po tej samej stronie, co poprzedni punkt, znajduje si wewntrz
trjkta wzgldem sprawdzanej linii. Implementacje znajdziesz na wydruku 4.5.2.
&4>./
:&4>./
&4>:./
: &4>:./
A&4>*./
:A&4>*./
K9&4>/
:K9&4>/
(D/
*
?
"(=IJ;$%(*6($1#)
&4>./
:&4>.
/
&4>:./
: &4>:.
/
A&4>*./
:A&4>*.
/
K9&4>/
:K9&4>
/
(D/
?
C7(
($6$6"6($1(*
&')*.
L7
(62"$*)
,: 6#*%(
($62
*
($1(*
$%&$*#*'%'(##
6($1#)
6"'$6'"&')& :
$2(# *
+
,
C'O$6(
(&&
"&6)*&')&
C6(&*' :
$"<$"<*""(9&<$&S& . 9&<$&S& .: &0"<$&S&/
P" &)%&62
T'(&'6#(
=:(&.$>:(&.$
SS:(&.$>:(&.$
&$$&<(<&0"&0"<$&S& 9&<$&S$
IJ HNB HNB/
U'(&'6#(
"(=:(&.$
>:(&.$SS:(&.$
>:(&.$
&$$&<(<&0"&0"<$&S& 9&<$&S$
HNB IJ HNB/
V'(&'6#(
"(=:(&.$>:(&.$SS:(&.$>:(&.$
&$$&<(<&0"&0"<$&S& 9&<$&S$
HNB HNB IJ/
=&$HNB;
J$6
$%& :
($62 *
"7
#
6*81
L'$6($6'(*0"
$
$$6
"
=& ..& .:.SS& ..& .:.;
=& ..
R$.
SS$.
R& .:.
WW
& .:.
R$.
SS$.
R& ..
&%HNB/
?
E*($6(*0"0$
$%
H($6O$%&60"#"
=$&<:&6<9&*(9&<$&S& . 9&<$&S& .:
&0"<$&S&HNB
&%HNB/
"(
&%IJ/
?
%0&*': *
$"<$"<*""(9&<$&S& .: 9&<$&S& .*
&0"<$&S&/
P" &)%&62
T'(&'6#(
=:(&.$>:(&.$
SS:(&.$>:(&.$
&$$&<(<&0"&0"<$&S& 9&<$&S$
IJ HNB HNB/
U'(&'6#(
"(=:(&.$
>:(&.$SS:(&.$
>:(&.$
&$$&<(<&0"&0"<$&S& 9&<$&S$
HNB IJ HNB/
V'(&'6#(
"(=:(&.$>:(&.$SS:(&.$>:(&.$
&$$&<(<&0"&0"<$&S& 9&<$&S$
HNB HNB IJ/
=&$HNB;
J$6
$%& :
($62 *
"7
#
6*81
,,