Úvod do 3D geometrie První přednáška mi vyšla na 90 minut po slajd 31 (3D representace modelů). Ten zbytek jsem pak prolítnul tak za pět minut, ale myslím si, že by se to dalo stihnout líp, kdyby si člověka posípíšil. Možné změny a doplňky: Fourrierova transformace jako příklad skalárního součinu Rozvést vlastní čísla a vlastní vektory
Přednášející Martin Klíma Firmy: Hry: ALTAR ALTAR interactive IDEA games Codemasters Warhorse Studios Hry: Original War UFO: After* série ArmA, Queen’s gambit, Alpha Prime OFP Dragon Rising
Obsah přednášky 1/2 Rekapitulace: Homogenní souřadnice a projekce Vektory, skaláry a matice Sčítání a násobení vektorů Rotace, translace a jiné transformace Kovariantní a kontravariantní souřadnice Homogenní souřadnice a projekce Transformace v homogenních souřadnicích Skládání transformací Projekční matice
Obsah přednášky 2/2 3D model Vrcholy, hrany, strany (vertexy, edže a fejsy) Unwrap Další údaje (např. barvy)
Skaláry, Vektory, Matice
Skaláry, vektory, matice Orientovaný bivektor (červená věc) je vlastně matice (in as much as že taky kóduje rotaci) a objemový element je vlastně skalár (velikost objemu)
Vektorový prostor Vektor: 𝑎 , 𝒂 Komutativnost: 𝒂+𝒃=𝒃+𝒂 Asociativnost: 𝒂+ 𝒃+𝒄 =𝒂+𝒃+𝒄 Nulový prvek: 𝒂+𝟎=𝒂 Inverzní prvek: 𝒂+ −𝒂 =𝟎 Distributivnost: 𝑘 𝒂+𝒃 =𝑘𝒂+𝑘𝒃 Skalár – v angl. Scalar [skejl‘r] – od anglického ‚scale‘, škálovat V našich úvahách se vesměs omezíme na prostor ℝ 3 respektive ℝ 4 , tj. prostor uspořádaných trojic respektive čtveřic reálných čísel.
Dimenze prostoru Lineární kombinace vektorů: Lineární nezávislost: 𝒙=𝑘𝒂+𝑙𝒃+…+𝑚𝒄 𝒙= 𝑖 𝑛 𝑘 𝑖 𝒂 𝒊 Lineární nezávislost: 𝑎 𝑖 ≠ 𝑗 𝑛−1 𝑙 𝑗 𝒂 𝒋 Dimenze prostoru je maximální počet lineárně nezávislých vektorů
Báze V prostoru dimenze n vybereme n lineárně nezávislých vektorů a všechny ostatní vektory vyjádříme jako jejich lineární kombinaci Zvolené vektory nazýváme báze prostoru Kanonická neboli normální báze v ℝ 𝑛 𝒆 𝟏 = 1, 0, 0 … 0 𝒆 𝟐 = 0, 1, 0 … 0 ⋮ 𝒆 𝒏 = 0, 0, 0 … 1 Platí že: 𝒆 𝒊 ⋅ 𝒆 𝒋 = 𝛿 𝑖𝑗 0 𝑖≠𝑗 1 𝑖=𝑗 tj. součin bázového vektoru se sebou samým je 1, a se všemi ostatními je 0 Na definici ‚normálnosti‘ potřebujeme definici skalárního součinu – viz další slide
Skalární součin a metrika prostoru V angličtině zvaný dot product 𝒂⋅𝒃=𝑓 Skalární součin definuje metriku prostoru 𝒂⋅𝒂= 𝒂 2 Též definuje úhel mezi vektory: 𝒂⋅𝒃= 𝒂 𝒃 cos 𝛼 Tato definice nezávisí na dimenzi prostoru Vektory, pro které platí 𝒂⋅𝒃=0 nazýváme ortogonální vektory Vektory, pro které platí 𝒂⋅𝒃=0 a 𝒂 = 𝒃 =1 nazýváme ortonormální vektory
Skalární součin Vlastnosti: Součin dvou vektorů v normální bázi: Komutativnost: 𝒂⋅𝒃=𝒃⋅𝒂 Distributivnost: 𝒂⋅ 𝒃+𝒄 =𝒂⋅𝒃+𝒂⋅𝒄 Násobení skalárem: k𝒂 ⋅ 𝑙𝒃 = 𝑘𝑙 (𝒂⋅𝒃) Součin dvou vektorů v normální bázi: 𝒂⋅𝒃=∑ 𝑎 𝑖 𝒆 𝒊 ⋅∑ 𝑏 𝑖 𝒆 𝒊 = 𝑖,𝑗 𝑎 𝑖 𝑏 𝑗 𝒆 𝒊 ⋅ 𝒆 𝒋 = 𝑖 𝑎 𝑖 𝑏 𝑖
Vektorový součin Nazývaný cross product, definice platí jen v ℝ 3 Zobecnění v ℝ 𝑛 : Ortogonální doplněk k 2 vektorům Vektor kolmý na n – 1 vektorů Ale v ℝ 3 můžeme psát: 𝒂×𝒃= 𝒆 𝟏 𝒆 𝟐 𝒆 𝟑 𝑎 1 𝑎 2 𝑎 3 𝑏 1 𝑏 2 𝑏 3 = = 𝑎 2 𝑏 3 − 𝑎 3 𝑏 3 𝒆 𝟏 + 𝑎 3 𝑏 1 − 𝑎 1 𝑏 3 𝒆 𝟐 + 𝑎 1 𝑏 2 − 𝑎 2 𝑏 1 𝒆 𝟑 𝒂×𝒃 = 𝒂 𝒃 sin 𝛼 Vektor takto získaný není normální vektor, ale kontravariantní
Transformace Druhy Identita Translace Rotace Isotropní zmenšení/zvětšení (změna měřítka) Anisotropní změna měřítka Shear (zkosení)
Zapsání transformace Obecná transformace Lineární transformace 𝒂 ′ =𝑓 𝒂 Lineární transformace 𝑎 𝑖 ′ =∑ 𝑐 𝑖𝑗 𝑎 𝑗 𝒂 ′ =𝑀𝒂
𝐴= 𝑎 11 𝑎 12 ⋯ 𝑎 1𝑛 𝑎 21 𝑎 22 … 𝑎 2𝑛 ⋮ ⋮ ⋱ ⋮ 𝑎 𝑛1 𝑎 𝑛2 … 𝑎 𝑛𝑛 Matice Budeme se zabývat jen čtvercovým maticemi n × n: 𝐴= 𝑎 11 𝑎 12 ⋯ 𝑎 1𝑛 𝑎 21 𝑎 22 … 𝑎 2𝑛 ⋮ ⋮ ⋱ ⋮ 𝑎 𝑛1 𝑎 𝑛2 … 𝑎 𝑛𝑛 Násobení matic: 𝐴𝐵= 𝒂 𝟏 𝒂 𝟐 ⋮ 𝒂 𝒏 𝒃 𝟏 𝒃 𝟐 ⋯ 𝒃 𝒏 = 𝒂 𝟏 ⋅ 𝒃 𝟏 𝒂 𝟏 ⋅ 𝒃 𝟐 ⋯ 𝒂 𝟏 ⋅ 𝒃 𝒏 𝒂 𝟐 ⋅ 𝒃 𝟏 𝒂 𝟐 ⋅ 𝒃 𝟐 ⋯ 𝒂 𝟐 ⋅ 𝒃 𝒏 ⋮ ⋮ ⋱ ⋮ 𝒂 𝒏 ⋅ 𝒃 𝟏 𝒂 𝒏 ⋅ 𝒃 𝟐 ⋯ 𝒂 𝒏 ⋅ 𝒃 𝒏 Násobení není komutativní Stejně tak skládání transformací není komutativní
Základní maticové identity Inverzní matice: 𝐴 𝐴 −1 = 𝐴 −1 𝐴=𝐼 Transponovaná matice: 𝐴𝒙=𝒙 𝐴 𝑇 Pro čtvercové matice A, B platí: 𝐴 𝐵𝒙 = 𝐴𝐵 𝒙 𝐴𝐵 𝑇 = 𝐵 𝑇 𝐴 𝑇 𝐴𝐵 −1 = 𝐵 −1 𝐴 −1 𝐴 −1 𝑇 = 𝐴 𝑇 −1
Matice 3×3 Transponovaná matice Determinant Inverzní matice 𝐴 𝑇 = 𝒂 𝟏 𝒂 𝟐 𝒂 𝟑 𝑇 = 𝒂 𝟏 𝒂 𝟐 𝒂 𝟑 Determinant 𝐷 𝐴 = 𝒂 𝟏 ⋅ 𝒂 𝟐 × 𝒂 𝟑 = 𝒂 𝟑 ⋅ 𝒂 𝟏 × 𝒂 𝟐 … Inverzní matice 𝐴 −1 = 1 𝐷 𝑎 2 × 𝑎 3 𝑎 3 × 𝑎 1 𝑎 1 × 𝑎 2
Transformace Lineární Podobnosti Eukleidovské Anisotropní změna měřítka Zrcadlení Zkosení Zachovává rovnoběžky Podobnosti Isotropní změna měřítka Zachovává úhly Eukleidovské Rotace Identita Zachovává úhly a vzdálenosti
Transformace Rotace Změna měřítka Řetězení transformací D = 1 Matice jsou ortonormální Osa rotace je vlastní vektor matice Změna měřítka Hodnoty jenom na diagonále Řetězení transformací Asociativita násobení zaručuje, že je možné vynásobit matice mezi sebou
𝒆 𝒊 ⋅ 𝒖 𝒋 = 0, 𝑖≠𝑗 &1, 𝑖=𝑗 ⟹ 𝒆 𝒊 = 𝒖 𝒋 × 𝒖 𝒌 Transformace normál Jak zachovat úhel mezi vektory stejný i po transformaci? 𝒂⋅𝒃= 𝑀𝒂 ⋅ 𝑁𝒃 𝑀= 𝐞 𝟏 𝐞 𝟐 𝐞 𝟑 ;𝑁= 𝐮 𝟏 𝐮 𝟐 𝐮 𝟑 𝑀𝒂= 𝑎 1 𝒆 𝟏 + 𝑎 2 𝒆 𝟐 + 𝑎 3 𝒆 𝟑 ;… 𝑀𝒂 ⋅ 𝑁𝒃 = 𝑎 1 𝑏 1 𝒆 𝟏 ⋅ 𝒖 𝟏 + 𝑎 1 𝑏 2 𝒆 𝟏 ⋅ 𝒖 𝟐 +…+ 𝑎 2 𝑏 2 𝒆 𝟐 ⋅ 𝒖 𝟐 +… Tudíž všechny smíšené členy musí být nulové: 𝒆 𝒊 ⋅ 𝒖 𝒋 = 0, 𝑖≠𝑗 &1, 𝑖=𝑗 ⟹ 𝒆 𝒊 = 𝒖 𝒋 × 𝒖 𝒌 𝑀 −1 = 𝑁 𝑇 𝑁= 𝑀 −1 𝑇
Translace Translace je přičtení vektoru: 𝒂 ′ =𝒂+𝒕 Translace není lineární transformace, nelze ji vyjádřit maticí 3×3
Homogenní souřadnice Přechod z ℝ 3 do ℝ 4 Zavedeme čtvrtou souřadnici w: 𝒂=(𝑥, 𝑦, 𝑧, 𝑤) A definujeme přechod z homogenních souřadnic jako: 𝒂= 𝑥 𝑤 , 𝑦 𝑤 , 𝑧 𝑤 Volba w není jednoznačná, až na další bude 1
Translace v homogenních souřadnicích Dá se jednoduše zapsat jako: 𝒂 ′ =𝑀𝒂= 1 0 0 𝑡 𝑥 0 1 0 𝑡 𝑦 0 0 1 𝑡 𝑧 0 0 0 1 𝑎 𝑥 𝑎 𝑦 𝑎 𝑧 1 = 𝑎 𝑥 + 𝑡 𝑥 𝑎 𝑦 + 𝑡 𝑦 𝑎 𝑧 + 𝑡 𝑧 1
Transformace v homogenních souřadnicích L T Transformační matice: L: lineární transformace T: translace 0, 1: pro afinní matice je tento řádek vždy (0, 0, 0, 1) 1
Skládání transformací Prostory objektů: Object space: Relativně vůči počátku objektu World space Translace a rotace objektu vůči počátku světa Camera space Kamera je vždy v počátku Screen space Perspektivní transformace x, y souřadnice + z-buffer
Perspektivní projekce Perspektiva není afinní transformace: 𝒂 ′ =𝑀𝒂= 1 0 0 0 0 1 0 0 0 0 3 −4 0 0 −1 0 𝑎 𝑥 𝑎 𝑦 𝑎 𝑧 1 = 𝑎 𝑥 𝑎 𝑦 3𝑎 𝑧 −4 − 𝑎 𝑧 ⇒ − 𝑎 𝑥 𝑎 𝑧 − 𝑎 𝑦 𝑎 𝑧 − 3𝑎 𝑧 −4 𝑎 𝑧 Zobrazuje frustum (komolý jehlan) do krychle se středem v počátku a délce hrany 2 Right = Top = 1 Near = 1 Farr = 2 Body, kde a_x < a_z se zobrazi, podobne pro a_y. Cim je a_z vetsi, tim se blizi k (0,0) Pro a_z = 1 bude z-buffer 1, pro 2 bude -1
Příklad: bod a rovina Rovnice roviny v 3D: 𝑎𝑥+𝑏𝑦+𝑐𝑧+𝑑=0 𝒏⋅𝒂+𝑘=0 Je bod P napravo nebo nalevo od roviny? 𝒏⋅ 𝑷+𝑡𝒏 =−𝑘 𝑡=− 𝑘+𝒏⋅𝑷 𝒏⋅𝒏 t < 0: jsme ve směru n, t > 0: jsme na druhé straně
Příklad: Kolize dvou koulí Mějme dvě koule o poloměrech 𝑟 1 a 𝑟 2 , s počáteční polohou 𝑷 𝟏 a 𝑷 𝟐 , a s rychlostmi 𝒗 𝟏 a 𝒗 𝟐 . Pak požadujeme: ( 𝑷 𝟏 +𝑡 𝒗 𝟏 )−( 𝑷 𝟐 +𝑡 𝒗 𝟐 ) ≤ 𝑟 1 + 𝑟 2 𝑷 𝟏 − 𝑷 𝟐 =𝑷, 𝒗 𝟏 − 𝒗 𝟐 =𝒗, 𝑟 1 + 𝑟 2 =𝑅: 𝑷+𝑡𝒗 ≤𝑅 𝑷⋅𝑷+2𝑡𝑷⋅𝒗+ 𝑡 2 𝒗⋅𝒗= 𝑅 2 𝑡 0,1 = −2𝑷⋅𝒗± 𝑷⋅𝒗 2 −4𝒗⋅𝒗(𝑷⋅𝑷− 𝑅 2 ) 2𝒗⋅𝒗
Příklad: Kolize dvou koulí ( 𝑡 𝑐 𝒗−𝑷)⋅𝒗=0 𝑡 𝑐 = 𝑷⋅𝒗 𝒗⋅𝒗
Příklad: Lineární kombinace vektorů Lineární nezávislost vektorů: Determinant matice Lineární kombinace: 𝒂= 𝑥 1 𝒖+ 𝑥 2 𝒗+ 𝑥 3 𝒘 𝒂= 𝒖 𝒗 𝒘 𝑥 1 𝑥 2 𝑥 3 =𝑀𝒙 𝒙= 𝑀 −1 𝒂
3D representace objektů Mesh: Seznam vertexů Seznam stran (faces) Každá strana má seznam vertexů (po směru hodinových ručiček/clockwise) 16 bitový index Defaultní triangle list Datové struktury vertexů: Triangle strip Triangle list Triangle fan
Informace uložené ve vertexu Poloha Normála Tangenta Barva Texturové (uv) souřadnice Váhy a indexy kostí …další speciální informace Celkem max. 255 bytů na vertex
Texturové souřadnice (unwrap)
Texturové souřadnice