Download - RapidRaycast

Transcript
Page 1: RapidRaycast

RapidRaycastTrimesteroverschrijdend Project

Bjorn SchobbenDomien Nowicki

Page 2: RapidRaycast

Overzicht

• Wat Is Raycasting?

• Project Doel

• Project Structuur

• Project Algoritmen

• Demo

• Vragen?

Page 3: RapidRaycast

Wat Is Raycasting?• Snelle techniek om 3D beeld te

genereren uit 2D map (plattegrond)

• Sneller dan raytracing−Niet alle rays berekenen, slechts 1 per

vertikale streep van scherm

• Pseudo-3D beeld−Niet perspectief correct−Geen echte lichtinval−Altijd gebruik van simpele objecten

(bv. muren)

Page 4: RapidRaycast

Wat Is Raycasting?

• Bekend voorbeeld: Wolfenstein 3D

Page 5: RapidRaycast

Project Doel

• Raycast engine bouwen

• Met modeler−Eigen map kunnen maken

Page 6: RapidRaycast

Project Structuur• Texturelijst

• Map− 2D array van cellen

• Ray− Zoeken van dichtsbijzijnde muren

• Slice− Renderen van een vertikale scherm-streep

• Raycaster− Heel het beeld renderen, via slice

• Keuze tussen vectoren en hoeken− Met vectoren: makkelijker en

nauwkeuriger

Page 7: RapidRaycast

Project Algoritmen: Raycasting

• Position vector−Positie van het oog

• Direction vector (eenheids vector)−Richting waar het oog naar kijkt

• Camera plane vector (eenheids vector)−Richting van het cameravlak

Page 8: RapidRaycast

Project Algoritmen: Raycasting

• Voor elke vertikale streep,“cast” een ray

• DW = afstand totdichtsbijzijnde muur

• DC = afstand tot camera = 1 (eenheidsvector)

• WH = eigenlijke muur hoogte

• PH = geprojecteerde muur hoogte = ?

Page 9: RapidRaycast

Project Algoritmen: Raycasting

• PH/DC = WH/DW (driehoeksverhouding)

• PH = WH / DW * DC

Page 10: RapidRaycast

Project Algoritmen: Raycasting

• PH = Wall slice hoogte

• SH = Scherm hoogte

• Wall slice is gecentreerd over het scherm−Positie van wall slice = (SH/2) – (PH/2)

• Teken nu wall slice voor elke vertikale streep, klaar!

Page 11: RapidRaycast

Project Algoritmen: Ray

• DDA algoritme: Iteratief elke cel, die ray snijdt, controleren op aanwezigheid muur:−Bereken afstand tot volgende horizontale

en verticale intersectie−Als de horizontale korter: beschouw

bovenbuur−Als verticale korter: Beschouw

rechterbuur−Analoog voor rays in andere richtingen

• Afstand tot muur en intersectiepunt met muur onthouden

Page 12: RapidRaycast

Demo

Page 13: RapidRaycast

Vragen?