Teksture lesa |
2. Potek resevanja
2.1 Opis rasti drevesa
2.2 Simulacija rasti drevesa
3. Zajem slike
4. Upravljanje s programom
4.1 Zapis slike
5. Detajli programa
5.1 Inicializacija grafike
5.2 Komunikacija z uporabnikom
5.3 Nastavitev barvne palete, zajem
in prenos slike
6. Zakljucek
7. Reference
Drevesa rastejo v stozcih, v nasem primeru (smreka) je razmerje med
visino in polmerom 80:1. Polmer zacetne vejice
ali debelina letnice v prihodnjosti je odvisna od preskrbljenosti drevesa.
Po opazovanjih lahko dolocimo, da se debelina letnice pri smreki giblje
med 1.5 in 3.5
mm. Letnica poganja spomladi, ko je dovolj hrane, v svetlo rjavi barvi,
ki se pozno v jeseni naglo spremeni v temno rjavo. Vrh enoletnega poganjka
se pri koncu rasti razveja v zasnove novih vejic. Naslednje leto se obstojeci
stozec oblece v novo plast lesa, oblecene zasnove vejic pa so novi stozci.
Medtem ko drevo raste v razmerju 80:1, rastejo
veje v razmerju priblizno 32:1. Poleg tega
moramo upostevati, da na spodnji petini debla, zasnove vej z rastjo pocasi
zamrejo. Polmer stozcev z visino ne pada konstantno, ampak niha okrog premice
konstantnega manjsanja z amplitudo do 3 mm
in periodo 0.5 m. Zaradi ovir, ki se pojavljajo
v blizini drevesa (stene, druga drevesa), se debelina letnic spreminja
tudi tangencialno, ne le radialno tako, da lahko pricakujemo najvec 15%
ekscentricnost debla. Na spodnji sestnajstini debla, zacenja deformacija
debla v radialni smeri naglo narascati, bolj ko se blizamo korenikam.
Najprej se generira nakljucna serija debelin letnic, katere se nato
sestejejo v radije posameznih let, le ti pa z mnozenjem definirajo vrhove
posameznih stozcev ob osi x. Na vrhu vsakega stozca se izbere nakljucno
stevilo vej, ki bodo pognale tega leta (0 do 7), polni krog se razdeli
na enakomerne dele stevila vej. Na to enakomerno kotno razporejenost vej
po obodu, se veje nakljucno zamakne +/- 20°. Poleg tega se veje nakljucno
zamakne od idealne visine (vrha stozca) +/- 5 cm. Nazadnje se izbere nakljucno
ekscentricnost debla (do 15 %). S temi parametri je deblo popolnoma popisano.
Zajem slike poteka za vsak piksel ekrana posebej. Skeniramo vrstice od vrha proti dnu in piksle od leve proti desni. Koordinate vsakega piksla [ij] posebej preracunamo v koordinate drevesnega koordinatnega sistema [xyz] po formuli:
I = (i-320) J = (j-240)
x = X + (sin(j)*I + sin(J)*J* cos(j))*Zoom/320
y = Y - (cos(j)*I - sin(J)*J* sin(j))*Zoom/320
z = Z - (cos(J)*J)*Zoom/320
Stevilke 320 in 240 veljajo za graficni nacin 640x480.
Ko se dolocijo koordinate posameznega piksla, se poisce barva le
tega. Paleta barv jelovega lesa se nahaja linearno razporejena med RGB
tockama [68 3C 00] in [D4 A4 2C] hex. Robni barvi sem dolocil vizualno
ob primerjavi lesa. (Velja za paleto TreePal0.COL) Glede na to, da najnatancnejsi
graficni nacini delujejo v RGB direktnem nacinu 8:8:8, se da v RGB prostoru
koordinatne osi R,G in B razdeliti na najvec 256 delov. Ce v to RGB kocko
postavimo daljico, bo ta daljica imela svojo dolzino glede na koordinatne
osi Dr Dg in Db. Le v redkih primerih bo katera od dolzin Dr Dg Db dolga
256 enot. Palete cistih barv rdece, zelene, modre, rumene, turkizne, violicne
ter sive bodo imele eno dve ali vse tri stranice dolge 256 enot. V nasem
primeru pa je razpon Dr Dg Db [+108 +104 +44] dec. Ker je koordinatni sistem
RGB celostevilcen sledi, da nam lahko daljica priskrbi le toliko razlicnih
barv, kot je dolga njena najdaljsa diferenca plus ena, v nasem primeru
je to 109 barv. Zapis slike, katere paleta se nahaja le na daljici, s komponentami
RGB bi bil zato potraten iz razlogov velikosti, kompresibilnosti ter hitrosti
izrisovanja. Zato sem se odlocil za graficni nacin z 256 fiksnimi barvami
640x480x256.
Barva posameznega piksla se torej doloci glede na njegove koordinate [xyz]. Koordinati y in z se pretvorita v oddaljenost od osi X, [r 2]= y 2 + z 2, poleg tega pa se v kot y = arctg(y/z) na ravnini YZ. Nato se glede na koordinato [x] in kot [y] poisce tisti zaporedni stozec, katerega radij ne presega oddaljenosti piksla od osi X. Glede na odstotek oddaljenosti piksla od notranjega stozca glede na zunanji stozec, se pikslu doloci barva iz palete (0% = 255, 100% = 1).
Radij posameznega stozca je odvisen od koordinate x: R(x) = (R[i] - (x/80))
Ta radij modificiramo z nihanjem po visini: R(x) = R(x) * (1 + (sin(4*P*x)*0.033))
ter z ekscentricnostjo: R(x) = R(x) * (1 + sin(y)*Exc)
Upostevajmo se vpliv korenik na deformacijo oboda: R(x) = R(x) * (1 + root*0.3*xx55)
R(x) = R(x) * [mul] Zadnji faktor, katerega moramo upostevati so veje. Veje sem simuliral tako, da sem na dolocenem obmocju okrog veje multipliciral vse radije stozcev. Multiplikacijski faktor je odvisen od modificiranega kota [j] med vektorjem veje in vektorjem izhodiscne tocke veje na osi X proti tocki [xyz]. Upostevajo se vse bliznje veje tako, da se njihovi faktorji med seboj mnozijo. Zacetni multiplikacijski faktor veje je mul = 1. Tega pomnozimo s preostalimi faktorji, ki so, ce je kot [j] manjsi od 0.65 rad (1 + 32*e-26*j), drugace pa 1
Z vsemi temi multiplikacijskimi faktorji smo deformirali stozce tako,
da smo dobili obliko drevesa. Obstaja se en multiplikacijski faktor, ki
zadeva barvo in sicer. Barva v vejah je temnejsa, ker so tu letnice debelin
[0.4 .. 1.2] mm in se njihova barva ne razteza cez cel razpon od svetle
do temne. Zato dodamo barvni multiplikator Cmul = mul16 , ki
zagotavlja potemnitev grc.
002.501 000.050 000.000
001.558 000.000 000.242
TreePal0.COL
Pri zaganjanju programa le ta zapisuje mozne probleme v datoteko TREE.ERR. Med tekom programa se da spreminjati parametre ravnine:
Zgradba:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|