Vivid raytracer
Egyebek
Fotózás

Testek és modellezés

Koordináta rendszer

Mivel a vivid egy raytracer, vagyis a 3 dimenziós tér modellezésére szolgál, így a koordináta rendszere is 3 térbeli irányból áll. Minden pont pozícióját három értékkel adjuk meg. Mértékegység nincs, és felső korlát sem a számértékekre. Azt viszont érdemes figyelembe venni, hogy végtelen nagy számokkal nehezebb dolgozni, így érdemes relatív kis értékeket választani. A koordinátarendszer közepe a 0 0 0, és használhatunk negatív számokat is!

A koordináták irányultsága is teljesen relatív, nincs kitüntetett irány, mi határozzuk meg, hogy merre legyen a „felfelé” és ehhez képest kell megadnunk a koordinátákat, megfelelő sorrendben! Elsőre talán kissé meredeken hangzik mindez, de nem olyan bonyolult, nézzünk is egy példát:

Koordináta rendszer

Mondjuk a fenti koordináta rendszert szeretnénk használni (ez az ajánlott). A vivid-ben a koordinátákat mindíg X Y Z sorrendben kell megadni. A cél, hogy a pozitív értékek a koordinátarendszerünkben mindig a nyíllal jelzett irányba essenek, a negatív értékek pedig ezzel ellentétesen. Ehhez a „felfelé” értéket 0 0 1 –re kell állítanunk majd, vagyis ezzel azt jelezzük, hogy a Z tengely mentén, pozitív irányba van a „felfelé” irány. Lássunk egy konkrét példát:

Koordináta rendszer

Az igénytelen kis zöld golyómat elhelyeztük a térben. A tengelyekre felvettem egy (a zöld golyóhoz hasonlóan igénytelen) skálát is, a szemléletesség kedvéért. A „felfelé” irányt 0 0 1 –nek állítottuk be. A zöld golyó középpontját pedig így adom meg (X Y Z sorrendben):

center = 1 2 3

Ezt a témát tovább bonyolítani nem lenne értelme, ha esetleg nem világos még valami, akkor a következőkben az lesz. Nézzük is sorban a használható alaptesteket!


Gömb

A gömb a legelemibb és egyben legegyszerűbb alaptest amit használhatunk. Leírásához nem kell más, mint megadni a középpontját és a sugarát:

sphere {
     center 0 0 0
     radius 0.5 }

Mint látható gömböt a sphere utasítással rajzolunk, és középpontját a center paraméterrel, átmérőjét a radius -al adjuk meg. És így néz ki:

Gömb


Henger (vagy kúp)

A henger szintén egyszerű eset, nem kell más hozzá csak két végpontja és a sugara(i):

cone {
     apex 0 0 0
     base 0 2 5
     radius 0.5
     capped }

Az apex és base a két végpont, a radius pedig a henger sugara. Van még egy utasítás, a capped. Ez egy elhagyható utasítás (tehát nem kötelező használni), arra szolgál, hogy lezárja a henger két végét. Ha elhagyod, akkor egy lyukas csövet kapsz (lásd lenti kép, második henger balról).

Azt írtam fentebb, hogy sugara(i), vagyis két sugara is lehet egy hengernek. Ha ez a két érték különböző, akkor kúpot kapunk. Nézzük is meg, hogyan kell ezt leírni:

cone {
     apex 0 0 0
     base 0 2 5
     apex_radius 0.5
     base_radius 1 }

A különböző hengerek, balról jobbra: Lezárt végű henger (capped), nyitott végű henger, kúp.

Hengerek


Korong

Korong egy síkidom ugyebár, és a vivid-ben kétféle létezik belőle. Teli és lyukas. Kezdjük a telivel:

ring {
     center 0 0 0
     normal 0 0 1
     radius 0.5 }

A center a középpont, a normal pedig a felület normálvektora. Hogy mi ez? Ez egy - a középpontba állított - képzeletbeli merőleges végpontja. Ez határozza meg a korong síkját. Fontos, hogy úgy kell megadni ennek az értékét, mintha a korong középpontja a 0 0 0 pontban lenne! A radius pedig az átmérő.

Ettől minimálisan különbözik csak a lyukas korong:

ring {
     center 0 0 0
     normal 0 0 1
     min_radius 0.2
     max_radius 0.5 }

Itt látható a két fajta korong egymás mellett:

Korongok


Sokszög (polygon)

A sokszög egy síkidom, leírása nem áll másból, mint megadni a sarkainak számát, majd sorban a sarkok koordinátáit. Két dologra is figyelni kell közben, egyrészt, hogy a pontok egy síkban legyenek, a másik, hogy sorrendben kell megadni őket (tehát valamelyik irányba körbejárva az alakzatot).

polygon {
     points 4
     vertex 1 4 1
     vertex 3 4 1
     vertex 3 2 1
     vertex 1 2 1 }

A points a sarkok száma, a vertex pedig a sarokpont koordinátája. Itt egy példa:

Polygon


Patch

Ez a leghülyébb alakzat, nem is egyszerű megérteni. Ez egy háromszög (tehát síkidom), de szemben a sokszöggel, minden sarkához tartozik egy normálvektor, amely meghatározza a patch görbületét. Ami bonyolítja a képet, hogy a normálvektorok csak az árnyékolásra vannak kihatással, tehát maga a test nem görbül meg, csak a fényt úgy veri vissza mintha görbe lenne. Megpróbálom egy ábrán megmutatni:

Patch


Az ábrán zöld színnel rajzoltam a patch valódi alakját, pirossal pedig azt, hogy optikai szempontból hogyan viselkedik. A patch leírása pedig ilyen:

patch {
     vertex 1 0 0 normal .1 0 1
     vertex 0 1 1 normal 0 .1 1
     vertex 0 0 .5 normal -.1 -.1 1 }

A vertex a sarokpontokat, a normal pedig a sarokponthoz tartozó normálvektort jelenti. A patch-nek mindíg csak 3 sarka lehet! Ilyen testre példa a fejlécben található Buddha szobor, ami sok ilyen patch-ből áll.



Tovább a testekkel végzett műveletekhez...»
foot