This is great non-grid-based raycast code. Thanks for sharing!
I've been hacking at something like this for a while, trying to write a portal based engine, using this (http://bisqwit.iki.fi/jutut/kuvat/programming_examples/portalrendering.html) as a guide. However, your code and method for the basic wall rendering is far more stable, not to mention faster than what I have been coming up with.
Mind if I borrow some of your frustum clipping and rendering code?
@smoke_th do you know who you replied to? electricgryphon is one of the pioneers of 3D on the PICO-8 and has spent the last 2 years making countless games, demos, libraries, and tutorials on the subject. Pretty sure he knows what's up. Raycasting and BSP are not mutually exclusive.
Where can I go to start learning how to code this sort of thing? I'm constantly blown away by what people are able to create in Pico-8. I understand coding basics, but writing a renderer is so far beyond me. I wouldn't even know where to start.
What is this area of programming called? Are there some good resources I could check out to start learning?
@Scathe @smoke_th is right though, this code is not based on raycasting. It just transforms the walls (lines) so it's easy to cull them and judge the distances of their vertices from the camera, then interpolates them (vertical line by vertical line) with a perspective-perfect mapping. The BSP is used for culling the level - I draw from the closest to the farthest and count "drawn" lines, then proceed to the next node. If I run out of vertical lines, then there's no reason to traverse the tree any further.
It's a very simple system that I used in this JS demo as well (pure canvas, no WebGL): https://github.com/s-m-k/wolfendoom
@bugglesman Try reading about rendering techniques, about how Wolfenstein and Doom was done etc. You can read my code too, but the solution presented here is very simple. Might be useful for a pico-8 game though, since I believe it might scale pretty well with corridor-dense level design and it's simpler and more effective than raycasting.
Log in to post a comment