A sugárkövető rendszer nem más, mint a fény útjának fizikai szimulációja. Az én programomban a fény egyenesen vonalban terjed mindaddig, amíg nem ütközik valamivel. Az ütközés számítása a sugárkövető rendszerek egyik sarokköve. A futási idő nagy részében a program ezt végzi.
A fénysugár program szintjén egy vektor, a felület pedig amivel ütközik egy háromszög. Ennek az ütközésnek a számítása két lépésben történik. Először ki kell számítani az egyenes és a háromszög csúcspontjai által alkotott sík metszéspontját. Ha ez megvan, le kell ellenőrizni a metszéspont a háromszögön belül van-e. Az algoritmus tehát nem csak azt tudja megmondani történik-e ütközés, azt is, hogy hol. Most az első lépést fogom megoldani.
Egyenes
Egy egyenest egyértelműen meghatároz két pontja, vagy egy pontja és az egyenessel párhuzamos vektor. Ezt a vektort irányvektornak hívják. Ez utóbbira van szükség a számításhoz. A sugár viszont két pontjával adott, ezért irányvektornak a végpont mínusz kezdőpontot veszem.
Legyen P pont helyvektora r0. Erre a pontra illeszkedő v vektorral párhuzamos egyenes egyenlete vektoros alakban:
Ahol t paraméter minden valós értéket felvehet.
Sík
A síkot meg lehet adni három nem egy egyenesre eső pontjával, vagy egy pontjával és a síkra merőleges vektorral. Ez a vektor a normálvektor. Számítása a 3 ismert pontból a következőképpen történik:
A sík egyenlete a:
Ahol az r vektor a sík egy tetszőleges pontjának helyvektora, n a normálvektor és D a:
Ahol r0 a sík ismert pontja. Mindez pedig koordinátás alakban:
Metszéspontszámítás
Az egyenes és sík döféspontja nem más, mint az egyenes és sík közös pontja. Vagyis ha a sík egyenletébe helyettesítjük az egyenesét, megoldjuk, majd ha a megoldás pozitív visszahelyettesítjük az egyenes egyenletébe, megkapjuk a keresett pontot. Ha negatív akkor a metszéspont a sugár kezdőpontja mögött van ezért nem érvényes. Az egyenest ha behelyettesítem a sík egyenletébe a következőt kapom:
Ebből ki kell fejezni 't'-t.
Ha kiszámoltuk és pozitív értéket kaptunk, vissza kell helyettesíteni az egyenes egyenletébe és kiszámolni. Ezzel megkapjuk azt a pontot ahol a sugár átdöfi a háromszög 3 pontja által alkotott síkot. Már csak azt kell eldönteni, hogy ez a pont a háromszögön belül van-e.