1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/raycastlib.git synced 2024-11-23 20:49:57 +01:00
This commit is contained in:
Miloslav Číž 2018-12-22 08:19:27 +01:00
commit 29a3a99010

View file

@ -2,9 +2,6 @@
Ray casting library for (not only) limited-resource computers. Ray casting library for (not only) limited-resource computers.
Take a look at my [Pokitto demos](https://gitlab.com/drummyfish/Pokitto-Raycasting) repository,
it contains some better code for learning the usage, including a very simple hello world.
eye-candy previews eye-candy previews
------------------ ------------------
@ -43,7 +40,7 @@ features
- Depth information (for fog). - Depth information (for fog).
- Camera shearing (looking up/down). - Camera shearing (looking up/down).
- Camera movement with collisions. - Camera movement with collisions.
- Support for opening door. - Partial support for opening door.
- Pure C, tested to run as C++ as well. - Pure C, tested to run as C++ as well.
- Optional framework functions that handle the whole rendering. - Optional framework functions that handle the whole rendering.
- Still flexible -- pixels are left for you to draw in any way you want. - Still flexible -- pixels are left for you to draw in any way you want.
@ -56,6 +53,31 @@ 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 specific project. So new features will be preferred to keeping the same
interface. interface.
how to use
----------
For start take a look at the [testTerminal.c](https://gitlab.com/drummyfish/raycastlib/blob/master/testTerminal.c) program.
It is only a little bit more complex than a simple hello world.
For more examples see the other files, plus my [Pokitto demos](https://gitlab.com/drummyfish/Pokitto-Raycasting) repository,
which contains some better documented example code, including a [very simple hello world](https://gitlab.com/drummyfish/Pokitto-Raycasting/blob/master/helloRay.cpp).
The basic philosophy is:
- Before including the header, define `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.
- Call `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.
- The library gets info about the world (such as floor or ceiling height) via *array* functions
(`RCL_ArrayFunction` type) -- functions that take *x* and *y* coordinates of a square and return given
information. This way you are free to generate the world procedurally if you want.
- Fixed point arithmetics is used as a principle, but there is no abstraction above it, everything is simply
an integer (`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`.
TODO TODO
---- ----