RayVenture
is a game. Check out pixels
which helped me learn more about this type of rendering.
Excellent explanations about the raycaster here and here.
NOTE to me: all walls and platforms are being drawn from bottom to top!
- Implement a working 2D raycaster with a specific FOV
- Draw walls out of distance values
- Add textures to walls
- Add special textures with half transparency or full transparency
- Add textures to floor and ceiling
- Add voxel objects
- Add colors to voxel objects
- Render objects from closest to furthest while skipping drawing over already drawn full opacity pixels in order to increase performance
- Implement drawing directly in the ray casting function to avoid memory allocations and preserve performance
- Add different floor and ceiling textures for different map tiles
- Add an ability to look freely up and down, moving up and down
- Improve how map tiles are stored, split the map into three maps, one for regular wall tiles, one for ceiling tiles and one for floor tiles
- Rotate the canvas by 90 degrees so drawing is more efficient
- Simplify map creation by making possible creating maps in external .txt files while following a defined format
- Add portals
- Add shading/lightning effects
- Draw a skybox
- Add different height walls while also their tops sides (floor), if seen from above, and bottom sides (ceilings), if seen from below
- Reimplement voxel objects again :/
- Add removable object walls (cool opening or moving animation with voxels)
- Add collision detection (circle-rectangle collision detection)
- Add a UI
- Go unsafe for performance increase after most of the project is finished
- Implement a new system for generating a map of rooms instead of the old one with only rng.
- For the record, I have tried adding FXAA in the fragment shader, which ended up in a weird output, have tried MSAA, but it doesn't work on textures, have tried applying bilinear texture filtering but unnoticeable.