Home Raycasting and Graphics Programming

Raycasting and Graphics Programming

One of the first games I’ve ever played was Wolfenstein 3D. This game had a profound effect on the rest of my life. Last July (2022) I started my learning adventure into programming and game dev. At that point I started a raycasting project that I ended up abandoning because I was hitting too many roadblocks in understanding.

After spending the last year learning as much about Python and programming bedrocks as possible, I’ve returned to raycasting, and other graphics programming projects.

While building the raycasting project, I got frustrated manually building each map using numbers so I decided to start building a map editor using Python, Pygame, and Pygame GUI.

This map editor loads assets and sprite assets then allows a user to be able to draw on the map using these texture assets. You can do that with various drawing tools you might come to expect from a map editor:

  • Ability to draw walls, floors, and ceilings
  • Tools such as rectangle, rectangle outline, flood fill, and eyedropper
  • Place the player start point and the starting player angle
  • Saving and loading of maps (a little required!)
  • Ability to test the map from the engine right away

While I was focusing on the raycasting project for a while and have done several variations of the raycasting project to improve things, I’ve moved on somewhat to more of a 3D engine built using Python/Pygame/ModernGL (OpenGL for Python) to build something that uses the GPU to be more performant.

The visual appearance of the engine is such that it still looks like a Raycasting engine. Still only 90 degree walls here but you can look up and down! Beyond that: collision works, doors work, slime, and blood have animated textures. Even got billboard sprites mostly working!

All of this is a work in progress but game dev has always been the goal for me and I try to spend at least a little bit of time everyday working on this stuff.

On the side, I’ve also been doing some practice in Unreal Engine in order to see how the professionals do it too! While I’ve been working in web dev for my day job, I’d much prefer to make games and the challenges it holds.