01.08.2013 Views

Ray Tracing op GPU en CPU - EDM - UHasselt

Ray Tracing op GPU en CPU - EDM - UHasselt

Ray Tracing op GPU en CPU - EDM - UHasselt

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

A B<br />

Figuur 5.10: Driehoekintersectie buit<strong>en</strong> de voxel. In voxel A wordt er e<strong>en</strong><br />

intersectiepunt gevond<strong>en</strong> met de grote driehoek. Dit punt bevindt zich buit<strong>en</strong><br />

voxel A. Het algoritme st<strong>op</strong>t, <strong>en</strong> bekomt bijgevolg e<strong>en</strong> fout intersectiepunt.<br />

z > 0 ⇒ stepZ = 1, anders stepZ = −1<br />

Vervolg<strong>en</strong>s zull<strong>en</strong> we de t-waard<strong>en</strong> bepal<strong>en</strong> die aangev<strong>en</strong> <strong>op</strong> welke plaats <strong>op</strong><br />

de straal we het volg<strong>en</strong>de x, y <strong>en</strong> z vlak intersecter<strong>en</strong>. Naar deze t-waard<strong>en</strong><br />

zull<strong>en</strong> we respectievelijk verwijz<strong>en</strong> als tMaxX, tMaxY <strong>en</strong> tMaxZ. Het mininum<br />

van deze drie waard<strong>en</strong> geeft dus aan hoever we ons maximaal <strong>op</strong> de straal<br />

kunn<strong>en</strong> begev<strong>en</strong>, alvor<strong>en</strong>s e<strong>en</strong> nieuwe voxel binn<strong>en</strong> te gaan.<br />

De initialisatiefase kunn<strong>en</strong> we besluit<strong>en</strong> na het bepal<strong>en</strong> van de waard<strong>en</strong><br />

tDeltaX, tDeltaY <strong>en</strong> tDeltaZ. tDeltaX geeft aan hoever we ons, in e<strong>en</strong>hed<strong>en</strong><br />

van t, moet<strong>en</strong> voortbeweg<strong>en</strong> <strong>op</strong> de straal om e<strong>en</strong> voxelbreedte te overbrugg<strong>en</strong>.<br />

Analoog geldt dit voor tDeltaY die zorgt voor e<strong>en</strong> overbrugging van de voxelhoogte,<br />

<strong>en</strong> tDeltaZ die zorgt voor e<strong>en</strong> overbrugging van de voxeldiepte.<br />

Nu de initialisatiefase volbracht is, kunn<strong>en</strong> we start<strong>en</strong> met het doorl<strong>op</strong><strong>en</strong> van<br />

het grid. Om te bepal<strong>en</strong> welk de volg<strong>en</strong>de voxel zal zijn, zull<strong>en</strong> we controler<strong>en</strong><br />

welke van de variabel<strong>en</strong> tMaxX, tMaxY <strong>en</strong> tMaxZ de kleinste waarde heeft.<br />

Stel tMaxX heeft de kleinste waarde, dan krijgt x de waarde x + stepX <strong>en</strong><br />

pass<strong>en</strong> we tMaxX aan door deze de waarde tMaxX + tDeltaX te gev<strong>en</strong>. Dit<br />

gebeurt analoog voor tMaxY <strong>en</strong> tMaxZ, indi<strong>en</strong> één van beid<strong>en</strong> de kleinste<br />

waarde bezit.<br />

Het algoritme zal blijv<strong>en</strong> naar de volg<strong>en</strong>de voxel over te gaan zolang we<br />

ons nog binn<strong>en</strong> het grid zull<strong>en</strong> bevind<strong>en</strong>, <strong>en</strong> zolang er nog ge<strong>en</strong> intersectie met<br />

e<strong>en</strong> driehoek gevond<strong>en</strong> is. Merk <strong>op</strong> dat het niet volstaat e<strong>en</strong> intersectie te<br />

vind<strong>en</strong>, maar deze intersectie moet zich wel degelijk binn<strong>en</strong> de betreff<strong>en</strong>de voxel<br />

bevind<strong>en</strong> om geldig te zijn. In figuur 5.10 wordt er e<strong>en</strong> situatie weergegev<strong>en</strong> waar<br />

het zonder deze maatregel fout zou l<strong>op</strong><strong>en</strong>. In voxel A bevindt zich namelijk e<strong>en</strong><br />

driehoek die de straal zou intersecter<strong>en</strong> buit<strong>en</strong> deze voxel, namelijk in voxel B.<br />

Indi<strong>en</strong> deze intersectie als geldig beschouwd zou word<strong>en</strong>, geeft dit duidelijk e<strong>en</strong><br />

ongew<strong>en</strong>st resultaat. We di<strong>en</strong><strong>en</strong> deze dus neger<strong>en</strong>, zodat in voxel B de juiste<br />

intersectie met de kleine driehoek gevond<strong>en</strong> wordt.<br />

Op het eerste zicht lijkt het controler<strong>en</strong> of e<strong>en</strong> intersectiepunt zich binn<strong>en</strong><br />

de voxel bevindt, zes floating point vergelijking<strong>en</strong> in te houd<strong>en</strong>, namelijk één<br />

per zijvlak. Die zes floating point vergelijking<strong>en</strong> kunn<strong>en</strong> makkelijk gereduceerd<br />

word<strong>en</strong> naar één floating point vergelijking. We bezitt<strong>en</strong> namelijk de maximale<br />

t-waarde die de straal kan hebb<strong>en</strong> <strong>op</strong>dat deze zich nog binn<strong>en</strong> de betreff<strong>en</strong>de<br />

voxel zal bevind<strong>en</strong>. Deze waarde kunn<strong>en</strong> we vergelijk<strong>en</strong> met de t-waarde van<br />

het bekom<strong>en</strong> intersectiepunt. Indi<strong>en</strong> deze waarde groter is dan de maximale<br />

40

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!