RapidRaycast
description
Transcript of RapidRaycast
RapidRaycastTrimesteroverschrijdend Project
Bjorn SchobbenDomien 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 totdichtsbijzijnde 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 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
Demo
Vragen?