RAČ UNALNIŠ TVO Preslikava tekstur na enostavne 3D objekte Vp •i' Vp Peter Žnuderl Na računalniku, telefonu, tablici in drugod se vsakodnevno srečujemo s 3D modeli, npr. pri računalniških slikah, igricah, programih. Vsi ti modeli so sestavljeni iz osnovnih geometrijskih likov - najpogosteje trikotnikov. Vendar bi sami po sebi bili zelo dolgočasni, če ne bi imeli teksture (informacije o barvi, pa tudi senč, obliki površine) in osvetlitve. V tem članku si bomo pogledali nekaj načinov, kako na 3D objekte dodajamo teksture. Teksture so 2D objekti - slike, 3D modeli pa v 3D prostoru definirani liki; tako nastane problem predstavitve 2D slik na 3D objektih. Obstaja več načinov preslikave 2D tekstur na objekte. V tem članku jih bomo omenili, posvetili pa se bomo enostavnejšim preslikavam na valje in krogle. Že za to pa bo potrebno nekaj znanja matematike. Računali bomo v radianih in uporabljali kotne funkcije ter sistem enačb z več neznankami. Kako preslikavamo teksture? Poznamo več načinov preslikave. Preslikava naprej in preslikava nazaj sta najbolj enostavni preslikavi uporabni za enostavne ploskve, npr. za kvadre, valje in krogle. Pri preslikavi naprej je postopek sledeč: vsak pi-ksel teksture preslikamo na objekt in objekt preslikamo na zaslon. Prvi korak imenujemo parametriza-čija, drugega pa projekčija. Nato sledi še t. i. antialiasing, da slika nima žagastih robov ali lukenj v teks-turi. Pri preslikavi nazaj računamo v obratni smeri. Za vsak piksel na zaslonu nas zanima, kateri del 3D objekta prikazuje in kateri del teksture leži na tistem delu objekta. SLIKA 1. 3D objekt (desno spodaj), teksture (levo spodaj) ter kompozicija istega objekta s teksturo in osvetlitvijo (na sredini) Parametrizacija Posvetili se bomo prvemu koraku preslikave naprej, to je parametrizačiji. Parametrizačija je podana z enačbami. Poznamo dimenzije teksture ter dimenzije objekta in podamo enačbo, po kateri lahko katero koli točko teksture preslikamo na pravilni del objekta. Enostavneje povedano, podali bomo enačbo, kako obleči teksturo na objekt. Preslikava s pomočjo ravnine. Parametrizačijo lahko zelo poenostavimo, če pri njej ne upoštevamo koordinate z oziroma globine. Tako imajo vsi elementi z enakima koordinatama x in y tudi enako barvo, ne glede na to, ali se nahajo spredaj ali zadaj ali kje vmes. To pomeni, da povsod na stranskih površinah, razen povsem spredaj in povsem zadaj, dobimo črtast vzoreč (glej sliko 2). Takšna preslikava je ravninska, saj si lahko predstavljamo, da slikamo teksturo tako, kot da bi jo obsijali iz ene ravnine. 24 PRESEK 42 (2014/2015) 5 24 RACUNALNIŠ TVO Preslikava s pomočjo valja. Drugi način je parame-trizacija s pomočjo valja. Namesto ploskve tu teks-turo oblečemo na valj in nato prežarčimo objekt z valjem. Predstavljajmo si, da vsak del valja oddaja svetlobo, proti objektu znotraj valja. Strani objekta tako dobijo pravilnejšo teksturo, vrh pa je še vedno precej spremenjen (glej sliko 3). Preslikava s pomočjo krogle. Pri preslikavi s pomočjo krogle lahko posebej določamo teksturo vsakega dela objekta (pri preslikavi z valjem sta zgornja in V \. ■■ .. i« SLIKA 3. Objekti po preslikavi s pomočjo valja spodnja ploskev preprosto iste barve kot zgornji oziroma spodnji del piksla na strani). Prihaja pa do popačitev na straneh pri oglatih površinah (glej sliko 4). Preslikava na valj Valj je prečej preprosto določiti, saj gre pravzaprav le za zvit pravokotnik. Tako je koordinato v teksture (višino) potrebno le pomnožiti z razmerjem višine teksture ter višine valja in rezultat je y koordinata valja. Iz razmerja med širino teksture in velikostjo kota dela valja, na katerega želimo nanesti teksturo, pa lahko izračunamo prostorske % in z koordinate. Koordinatni sistem teksture izberemo tako, da je višina teksture enaka 1 in širina teksture prav tako 1. V tem primeru preprosto preračunamo y koordinato po formuli y = v ■ h, pri čemer je h v koordinata točke P, ki jo želimo preslikati. Koordinato % preračunamo po formuli % = r ■ sin(2n ■ u), z pa po formuli z = r ■ čos(2n ■ u). v = višina teksture u = širina teksture % = širina valja y = višina valja z = globina valja r = polmer valja PRESEK 42 (2014/2015) 5 25 RAČU N A L NIŠTVO Primer. Preslikave tocke P iz teksture v tocko P' na valju. Podatki: višina valja h = 2 ■ v polmer valja r = 1 P(0,2,0,6) ■ P' y = v ■ h P'y = 0,6 ■ 2 = 1,2 P'x = r ■ sin(2n ■ u) P'x = 1 ■ sin(2n ■ u) = 0,95 P' z = r ■ cos(2n ■ u) P'z = 1 ■ cos(2n ■ u) = 0,31 Rezultat: P'(0,95, 1,2, 0,31) Preslikava na kroglo Objekt je podan s sfericnima koordinatama $ in 0 (navpični in horizontalni kot): ■ 0 = f(u,v), $ = g(u,v). Ce sta f in g funkciji enega parametra, lahko zapišemo enačbi kot: ■ 0 = au + b, $ = cv + d. Imamo dve enacbi s štirimi neznankami in štiri raz-licne tocke. v 1 u P(u,v) v 0 0,25 0,5 0,75 Vedeti moramo kam bomo vpeli štiri tocke teksture na objekt. Lahko so štiri oglišca pravokotne teksture, lahko pa so to poljubne tocke znotraj. Ce vemo, kam želimo postaviti te štiri tocke, lahko z vstavljanjem 0 in $ ter u in v dobimo enacbi, s katerimi lahko izracunamo pozicijo katerekoli tocke na krogli. Za preracunanje pozicije tock iz sfericnih koordinat $ in 0 v koordinate x, y, z, to storimo z naslednjimi enacbami: ■ x = r sin 0 sin$, y = r cos $, z = r cos 0 sin$. Primer. Dani sta enotska tekstura (slika 7) in del krogle, na katero jo želimo preslikati (slika 8). V zgoraj navedeni enacbi za izracunanje formul za pridobivanje sferiCcnih koordinat vstavimo podatke: 1. Za tocki A in A' (u = 0,v = 0) (0 = 0, $ = n/2). 2. Za tocki B in B' (u = 1,v = 0) (0 = n/2, $ = n/2). 3. Za tocki C in C (u = 0,v = 1) (0 = 0, $ = n/4). 4. Za tocki D in D' (u = 1,v = 1) (0 = n/2, $ = n/4). y a h P4 P1 P2 P3 P4 u SLIKA 5. Tekstura v 2D koordinatnem sistemu SLIKA 6. Valj v 3D koordinatnem sistemu 1 26 PRESEK 42 (2014/2015) 5 RAČ UNALNIŠ TVO Izračunamo a, b, c in d ter jih vstavimo v splošni formuli. Dobili smo formuli za izračun sferičnih koordinat za ta primer. 1. 4. Vstavimo podatke točk A in A': 0 = au + b 0 = a • 0 + b b = 0 $ = cv + d n/2 = c • 0 + d d = n/2 Vstavimo podatke točk B in B': 0 = au + b n/2 = a • 1 + 0(Iz prejšnjega računa vemo, da je b = 0.) a = n/2 $ = cv + d n /2 = c • 0 + n/2 (Iz prejšnjega računa vemo, da je d = n/2.) ■ n /2 = n/2 (c smo množili z 0, zato ga bomo morali pridobiti iz drugih računov.) Vstavimo podatke točk C in C': ■ 0 = au + b (Ni več potrebno računati, saj že poznamo vse spremenljivke iz te enačbe.) ■ $ = cv + d ■ n/4 = c • 1 + n/2 (Iz prejšnjega računa vemo, da je d = n/2.) ■ c = -n/4 Za točko D nam ni potrebno računati, saj smo že iz prvih treh enačb pridobili vse potrebne podatke. v D C u - Sedaj lahko za poljubno točko P izračunamo položaj na krogli tako, da vstavimo koordinate iz teks-ture v spodnji formuli: ■ 0 = (n/2)u, $ = (-n/4)v + n/2. Po formulah za preračunanje y in z koordinat iz $ in 0 lahko te iste koordinate preračunamo še za xyz koordinatni sistem. Primer. Naj bo v našem primeru r = 3 in računamo položaj točke P', pri čemer se točka P teksture nahaja na P(0,75,0,5). ■ x = r sin 0 sin $ y = rčos$ z = r čos 0 sin $. 0 = (n/2)u = n/2 • 0,75 = 3n/8 $ = (-n/4)v + n/2 = (-n/4) • 0,5 + n/2 = = 3n/8 ■ P' x = r • sin 0 • sin $ P'x = 3 • sin(3n/8) • sin(3n/8) P'x = 3 • 0,92 • 0,92 P' x = 2,54 ■ P'y = r • čos $ P'y = 3 • čos(3n/8) P'y = 3 • 0,38 P' y = 1,14 0 = n/2 00 A B $ = n/2 SLIKA 7. Enotska tekstura SLIKA 8. Del krogle, na katero slikamo teksturo. PRESEK 42 (2014/2015) 5 27 2 3 RAČU N A L NIŠTVO ■ P 'z = r ■ cos 0 ■ sin $ P 'z = 3 ■ sin(3n/8) ■ cos(3n/8) P 'z = 3 ■ sin(3n/8) ■ cos(3n/8) P 'z = 3 ■ 0,92 ■ 0,38 P 'z = 1,05 Rezultat: P'(2,54, 1,14, 1,05) Zaključek Preslikava na kvader, valj ali kroglo je prvi korak lepljenja tekstur na objekte v računalništvu. Namen te-kstur je, da računalniško izdelanim objektom dodajo več podrobnosti; virtualne stvaritve tako po izgledu približajo naravnim. Brez tekstur bi si težko predstavljali videoigre, animirane filme, 3D kompozicije; predmeti bi namrec delovali togo in plasticno, saj povsem gladkih, enobarvnih površin v realnem svetu ne najdemo. Racunalniški svet bi tako bil mnogo manj privlacen in raznovrsten, kot je sedaj. Literatura [1] http://www.sharecg.com/v/52192/ related/5/3D-Model/Fuel-Can, dostopano: 16. 3. 2015. [2] http://escience.anu.edu.au/lecture/cg/ Texture/pri ntNotes.en.html, dostopano: 16. 3. 2015. [3] N. Guid, Skripta predmeta Racunalniška animacija, 2014. [4] http://escience.anu.edu.au/lecture/cg/ Texture/pri ntNotes.en.html, dostopano: 16. 3. 2015. [5] http://en.wiki pedi a.org/wi ki/Texture_ mapping, dostopano: 16. 3. 2015. _ XXX www.dmfa-zaloznistvo.si Barvni sudoku V 8 x 8 kvadratkov moraš vpisati zacetna naravna števila od 1 do 8 tako, da bo v vsaki vrstici, v vsakem stolpcu in v kvadratkih iste barve (pravokotnikih 2 x 4) nastopalo vseh 8 števil. O v O □ O m > a < 00 > m * £ a 2 3 1 3 5 8 .............. 4 4 1 7 8 6 4 2 4 6 5 2 2 L 5 E 8 L 6 4 L 8 17 9 2 S L E 4 6 Z 8 E L 7 S E S L 1 9 4 8 Z 8 E L L 17 Z 8 5 3 9 L S 4 9 Z L 9 Z 8 S L E 17 1 L L 3 17 S 9 2 8 www.presek.si XXX 28 PRESEK 42 (2014/2015) 5