Sisältö
Alkusanat
1 Johdanto
1.1 3D-grafiikka ja sen sovellukset
1.2 Tietokonegrafiikan historiaa
2 Geometriaa
2.1 Pisteetja karteesinen koordinaatisto
2.2 Pisteiden erotus ja vektorit
2.3 Vektorioperaatioita
2.3.1 Pistetulo
2.3.2 Ristitulo
2.3.3 Kaksiulotteinen ristitulo
2.4 Suora, säde, viivasegmentti ja murtoviiva
2.5 Taso
2.5.1 Taso ja normaali
2.5.2 Vaihtoehtoinen esitystapa tasolle
2.5.3 Pisteen etäisyys tasosta
2.5.4 Sovellus: valon heijastuminen tasosta
2.6 Monikulmiot
2.6.1 Yksinkertaiset monikulmiot
2.6.2 Ei-yksinkertaiset monikulmiot
3 Lisää geometrisia kappaleita
3.1 Monikulmioverkko
3.1.1 Monikulmioverkon esitystapoja
3.1.2 Kolmioketjut ja-viuhkat
3.1.3 Kulmapistetaulukot ja oheistieto
3.1.4 Kolmioketjun etsiminen
3.2 Monitahokkaat
3.3 Neliölliset pinnat
3.4 Tasa-arvopinnat
3.5 Tekniikoita kappaleiden muodostamiseen
3.5.1 Pyyhkäisykappaleet
3.5.2 CSG-tekniikka
3.6 Parametroidut käyrät ja pinnat
3.6.1 Bezier-käyrä
3.6.2 Spline-funktiot ja -käyrät
3.6.3 Uniformi B-spline-käyrä
3.6.4 Ei-uniformi B-spline-käyrä
3.6.5 Rationaaliset käyrät ja NURBS-käyrä
3.6.6 Lisää käyriä
3.6.7 Käyrät pinnalla
4 Geometriset muunnokset
4.1 Geometrinen muunnos funktiona
4.2 Lineaariset kuvaukset
4.3 Matriisit
4.3.1 Matriisi tulo
4.3.2 Matriisien operaatioita
4.3.3 Yksikkömatriisi ja käänteismatriisi
4.3.4 Matriisin determinantti
4.3.5 Lineaariset yhtälöryhmät
4.4 2D-avaruuden muunnokset
4.4.1 Perusmuunnokset
4.4.2 Affiinimuunnokset
4.4.3 Koordinaatistomuunnos
4.5 Homogeeniset koordinaatit
4.5.1 Homogeenisten koordinaattien periaate
4.5.2 Homogeeniset koordinaatit 2D-avaruudessa
4.5.3 Homogeeniset koordinaatit 3D-avaruudessa
4.5.4 Laskeminen homogeenisissa koordinaateissa
4.5.5 2D-perusmuunnokset homogeenisissa koordinaateissa
4.6 Muunnosten yhdistäminen
4.7 3D-muunnoksia
4.8 Eulerin kulmat
4.9 Kvaterniot
4.9.1 Kompleksiluvut
4.9.2 Kvaternioalgebra
4.9.3 Kvaterniot ja vektorit
4.9.4 Kierrot kvaternioilla
4.9.5 Kvaternioiden sovellukset
5 2D-geometrian ongelmia
5.1 Säteiden, suorien ja viivasegmenttien leikkaus
5.1.1 Analyyttinen ratkaisu
5.1.2 Viivasegmenttien leikkaus 2D-ristitulon avulla
5.2 Piste monikulmiossa
5.2.1 Piste ei-konveksissa monikulmiossa
5.2.2 Piste konveksissa monikulmiossa
5.3 Viivasegmentin ja suorakulmion leikkaus
5.4 Viivasegmentin ja konveksin monikulmion leikkaus
5.5 Monikulmioiden leikkaus
5.6 Pistejoukon konveksi peite
5.6.1 Naiivi ääripistealgoritmi
5.6.2 Grahamin algoritmi
5.6.3 Jarvisin matriisi
5.6.4 Muita algoritmeja konveksin peitteen etsimiseen
5.7 Laskennallista geometriaa
5.7.1 Voronoin diagrammi
5.7.2 Pyyhkäisymenetelmä
6 3D-geometrian ongelmia
6.1 Suoran ja tason leikkas
6.2 Suoran ja avaruuden monikulmion leikkaus
6.3 Avaruuden monikulmioiden leikkaus
6.4 Leikkaustestejä pääakseleiden suuntaiselle laatikolle ja pallolle
6.5 Näköfrustumin leikkaustestejä
6.6 Leikkaustestien toteuttamisesta . „ . „ . . „ . . „ . . . . . .
7 2D-piirto
7.1 2D-piirron vaiheet
7.2 Viivasegmentin piirto
7.3 Pehmeät ja paksut viivat
7.4 Ympyrän piirto
7.5 Tulvatäyttö
7.6 Monikulmion vaakarivitäyttö
7.7 Lisähuomioita 2D-piirrosta
8 3D-piirron liukuhihna
8.1 Piirtoliukuhihnan merkitys
8.2 Sovellusvaihe
8.3 Geometriavaihe
8.4 Rasterointivaihe
9 3D-piirron geometriavaihe
9.1 Muunnos katsojan koordinaatistoon
9.2 Valaistuksen laskenta kulmapisteille
9.3 Projektiot
9.3.1 Paralleeliprojektio
9.3.2 Perspektiiviprojektio
9.3.3 Projektioyhtälöt
9.3.4 Näköfrustumi
9.3.5 Perspektiiviprojektio 3D-muunnoksena
9.4 Näkövolyymin normalisointi
9.5 Mallin leikkaus
9.6 Muunnos ikkunakoordinaatistoon
10 Rasterointi
10.1 Monikulmioiden rasterointi
10.2. Sävytys
10.3 Teksturointi
10.3.1 Lineaarinen tekstuurikuvaus tasolle
10.3.2 Perspektiivikorjattu tekstuurikuvaus
10.3.3 Tekstuurikuvan suodatus
10.3.4 MIP-kartta
10.3.5 Tekstuurin yhdistäminen monikulmion väriin
10.3.6 Multiteksturointi
10.3.7 Muita tekstuurien käyttötapoja
10.3.8 Mainostaulut
10.3.9 Kolmiulotteiset tekstuurit ja proseduraaliset tekstuurit
10.3.10 Ympäristökuvaus ja kuutiokartta
10.3.11 Muita ympäristökuvaustekniikoita „ . . . . . . . . .
10.4 Sumu
10.5 Siluetti- ja alfa-testi
10.6 Z-puskuri
10.7 Ylinäytteistys, akkumulaatiopuskuri ja A-puskuri
10.8 Kirjoitus videopuskuriin ja jälkikäsittely
11 Valaistus
11.1 Diffuusi heijastuminen
11.2 Ambinetti valo
11.3 Pistemäiset valonlähteet
11.4 Spekulaarit heijastukset
11.5 Valaistus monikulmiomallissa
11.6 Muita valaistusmalleja
11.7 Pinnan valaistusyhtälö ja BRDF
11.8 Pinnan kuhmutus
11.8.1 Kuhmutuksen laskeminen korkeuskartasta
11.8.2 Pinnan tangenttikoordinaatisto
11.8.3 Lisähuomioita kuhmutuksesta
12 Näkyvyys
12.1 Näkyvyyde ongelma
12.2 Takapintojen poisto
12.3 Geometrinen näkyvyysleikkaus
12.4 Syvyyslajittelu, BSP ja octree
12.5 Sisätilojen piirtotekniikat
12.5.1 Konveksit solut, portaalit ja naapuruusgraafi
12.5.2 Portaalikarsinta
12.5.3 Staattinen solusta-soluun -näkyvyys
12.5.4 Solusta-soluun -näkyvyyslaskennan toteutuksesta
12.6 Z-puskuritekniikka
12.7 Lisää tekniikoita näkyvyyskarsintaan
12.7.1 Varjofrustumit
12.7.2 Z-karsintaa
12.7.3 Z-pyramiditekniikka
12.7.4 Hierarchical Occlusion Maps (HOM)
12.7.5 Vielä lisää tekniikoita
13 Varjot, läpikuultavuus ja heijastukset
13.1 Varjot
13.1.1 Varjot tasolle
13.1.2 Varjoärmiöt
13.1.3 Varjokartta
13.1.4 Lisää varjoista
13.2 Läpikuultavat pinnat
13.3 Heijastukset
14 Avaruudellisia tietorakenteita
14.1 Rajauslaatikot ja rajauslaatikkohierarkiat
14.2 Avaruuden tasajakoinen laatikointi
14.3 PR-quadtree
14.4 Haut quadtreestä . „ . . . .
14.5 PR-octree
14.6 Point quadtree
14.7 K-d-puu
14.8 BSP-puu
14.8.1 Jaon toteutus BSP-puussa
14.8.2 BSP-puun sovelluksia
14.8.3 Huomioita BSP-puusta
14.8.4 Leafy-BSP
14.9 Muita avaruudellisia tietorakenteita
15 Tarkkuustaso ja maastomallit
15.1 Monikulmioverkon yksinkertaistaminen
15.2 Maastomallit
15.2.1 Maastonpiirron ongelmia ja ratkaisuja
15.2.2 Geomimap
15.2.3 PR-quadtree-pohjainen verkko
15.2.4 ROAM
16 Valo, värit ja kuvien esitysmuodot .
16.1 Valon voimakkuus ja gamma-korjaus
16.2 Aallonpituudet ja värit
16.3 Värit perusvärien summana
16.4 CIE-väristandardi
16.5 CIE-kromaattisuusdiagrammi
16.6 Värimallit
16.7 Kuvien tiedostomuodot
17 Piirtorajapinnat OpenGL ja DirectX
17.1 OpenGL
17.1.1 OpenGL:n tehtävät
17.1.2 OpenGL-piirtämisen periaatteet
17.1.3 OpenGL:n alustaminen
17.1.4 Geometriset muunnokset
17.1.5 Primitiivien piirtäminen
17.1.6 Kappaleiden muunnokset
17.1.7 Valaistus
17.1.8 Teksturointi
17.1.9 GLUT-apukirjasto
17.1.10 Verteksitaulukot
17.1.11 OpenGL-versiot ja laajennokset
17.1.12 OpenGL-ongelmia
17.1.13 OpenGL/GLUT-esimerkkiohjelma
17.2 DirectX
17.2.1 Windows-ohjelmointi
17.2.2 DirectX:n alustaminen
17.2.3 DirectX-piirto
18 Ohjelmoitavat sävyttimet
18.1 Ei-reaaliaikaiset sävytinkielet
18.2 Reaaliaikaiset ohjelmoitavat sävyttimet
18.3 Rekisterikombinoijat
18.4 Konekielinen sävytinohjelmointi
18.5 Korkean tason sävytinohjelmointikielet
18.6 Attribuuttitieto
18.7 Uniformi tieto
18.8 Tietotyypit ja operaatiot . „ . . . . . .
18.9 Esimerkejä
19 Säteenjäljitys ja globaali valaistus
19.1 Säteenjäljitys
19.2 Kappaleet säteenjäljityksessä
19.3 Säteenjäljityksen etuja ja ongelmia
19.4 Satunnaistettu säteenjäljitys
19.5 Säteenjäljityksen nopeuttaminen
19.6 Radiositeettimenetelmä
19.6.1 Pintojen radiositeetin ratkaiseminen
19.6.2 Muototekijän laskeminen
19.6.3 Lisähuomioita radiositeettimenetelmästä
19.7 Fotonikartoitus
20 Mallinnus, animaatio, reaaliaika
20.1 3D-mallit
20.1.1 Hierarkiset mallit
20.1.2 3D-mallien tuottaminen
20.1.3 3D-mallien tiedostomuodot
20.2 Animaatio
20.2.1 Kulmapiste-interpolointi ja luurankomallit
20.2.2 Käänteinen kinematiikka
20.3 Interaktiiviset ja reaaliaikaiset 3D-sovellukset