Log In  


by smk
Cart #38109 | 2017-03-09 | Code ▽ | Embed ▽ | License: CC4-BY-NC-SA
36


Purpose:
Learning pico-8.

Description:
A simple 2.5 renderer.

Features:

  • BSP-based, non-grid level rendering
  • lighting "fog"
  • 60 fps
36


Hi Smk,

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?

Many thanks,
Electric Gryphon


Hey, no problems, sorry for late response.

I had another version somewhere that supported simple BSP (not sure if I uploaded it though).


electricgryphon dude this is NOT raycasting. This is 2d BSP. Doom used it first.


@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.


wow, really nice and fast!


So smooth!

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.


Really cool. Can it do sectors of different heights? Because if not, it's just Wolf3d if Wolf3d didn't used grid system.


It can't, but the fact that it's not grid based makes it already a very different engine I believe.


Fantastic, I just started working on a new raycaster (I'm aware this isn't a raycaster, but similar 2.5 D idea anyway) in Pico-8. I keep wondering if it is possible to do fully texture mapped floors and ceilings as well as walls at 60fps, maybe not, but it'd be fun to try...

Thanks for the demo, something new to learn from.


No kidding, I'm starting with Pico-8 and this is like my end goal. It's simply amazing, great work!


Joining the chorus of n00bs - yup, that's why i started learning pico8, so that one day im able to build something like this! Thank you for sharing!



[Please log in to post a comment]