RapidRaycast Trimesteroverschrijdend Project Bjorn Schobben Domien Nowicki
Overzicht Wat Is Raycasting? Project Doel Project Structuur Project Algoritmen Demo Vragen?
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)
Wat Is Raycasting? Bekend voorbeeld: Wolfenstein 3D
Project Doel Raycast engine bouwen Met modeler − Eigen map kunnen maken
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
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
Project Algoritmen: Raycasting Voor elke vertikale streep, “cast” een ray DW = afstand tot dichtsbijzijnde muur DC = afstand tot camera = 1 (eenheidsvector) WH = eigenlijke muur hoogte PH = geprojecteerde muur hoogte = ?
Project Algoritmen: Raycasting PH/DC = WH/DW (driehoeksverhouding) PH = WH / DW * DC
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!
Project Algoritmen: Ray DDA algoritme: Iteratief elke cel, die ray snijdt, controleren op aanwezigheid muur: − Bereken afstand tot volgende intersectie met horizontale en verticale roosterlijn − 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
Demo
Vragen?