description | Suckless PD 2D raycasting library |
repository URL | https://git.coom.tech/drummyfish/raycastlib.git |
owner | drummyfish@disroot.org |
last change | Fri, 17 Nov 2023 20:51:10 +0000 (17 21:51 +0100) |
last refresh | Thu, 21 Nov 2024 08:20:54 +0000 (21 09:20 +0100) |
mirror URL | git://repo.or.cz/raycastlib.git |
https://repo.or.cz/raycastlib.git | |
ssh://git@repo.or.cz/raycastlib.git | |
bundle info | raycastlib.git downloadable bundles |
content tags |
Public domain ray casting library for (not only) resource-limited computers.
If you like this, you may also like my similar project: small3dlib. These two libraries can very easily be combined together -- here is a proof-of-concept gif (environment rendered with raycastlib, cubes with small3dlib):
I've made a complete game with this library: Anarch.
Pokitto (32bit embedded console, 48 MHz, 36 kB RAM):
SDL (PC):
Arduboy (8bit Arduino console, 16 MHz, 2.5 kB RAM):
terminal:
Gamebuino META (Arduino 32bit console, 48 MHz, 32 kB RAM):
NOTE: Backwards compatibility isn't a goal of this libraray. It is meant to be an as-is set of tools that the users is welcome to adjust for their specific project. So new features will be preferred to keeping the same interface.
Don't forget to compile with -O3! This drastically improves performance.
For start take a look at the helloWorld.c program and other examples. For more examples see my Pokitto demos repository.
Also see the library code itself, it is meant to be self-documenting -- you'll find the description of a lot of things at the start of the file.
The basic philosophy is:
RCL_PIXEL_FUNCTION
to the name of a function you will use to
draw pixels. It is basically a fragment/pixel shader function that the library will call. You will
be passed info about the pixel and can decide what to do with it, so you can process it, discard it,
or simply write it to the screen.RCL_renderSimple
or RCL_renderComplex
to perform the frame rendering. This will cause the
library to start calling the RCL_PIXEL_FUNCTION
in order to draw the frame. You can optionally write
a similar function of your own using the more low-level functions which are also provided.RCL_ArrayFunction
type) -- functions that take x and y coordinates of a square and return given
information. This way you are free to not only fetch the map data from an array, but also generate
the world procedurally if that is what you want.RCL_Unit
type). The space is considered to be a dense grid, where each world square
has a side length of RCL_UNITS_PER_SQUARE
units. Numbers are normalized by this constant, so e.g.
the sin function returns a value from -RCL_UNITS_PER_SQUARE
to RCL_UNITS_PER_SQUARE
.Everything is CC0 1.0 (public domain, https://creativecommons.org/publicdomain/zero/1.0/) + a waiver of all other IP rights (including patents).
I've written all code completely myself from scratch, the art used in demos is either my own released under CC0 or someone else's released under CC0.
This is not a mandatory condition, but please consider supporting free software and free culture by using free licenses and/or waivers.
If you'd like to support me or just read something about me and my projects, visit my site: www.tastyfish.cz.
You can also choose to use this under the following waiver which is here to just ensure more legal safety and waiving of additional IP such as patents:
The intent of this waiver is to ensure that this work will never be encumbered by any exclusive intellectual property rights and will always be in the public domain world-wide, i.e. not putting any restrictions on its use.
Each contributor to this work agrees that they waive any exclusive rights, including but not limited to copyright, patents, trademark, trade dress, industrial design, plant varieties and trade secrets, to any and all ideas, concepts, processes, discoveries, improvements and inventions conceived, discovered, made, designed, researched or developed by the contributor either solely or jointly with others, which relate to this work or result from this work. Should any waiver of such right be judged legally invalid or ineffective under applicable law, the contributor hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to this right.
12 months ago | master | logtree |