1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/raycastlib.git synced 2024-11-20 20:19:57 +01:00
This commit is contained in:
Miloslav Číž 2020-06-21 12:02:37 +02:00
parent 74af704656
commit 0005f40264
5 changed files with 40 additions and 29 deletions

View file

@ -48,18 +48,19 @@ features
- **Pure C99**, tested to run as C++ as well.
- Optional framework **functions that handle the whole rendering**.
- Still **flexible** -- pixels are left for you to draw in any way you want.
- **Tested on multiple platforms**:
- **Tested on many platforms**:
- PC (little endian, 64bit GNU)
- compilers: gcc, clang
- Emscripten (web browser, JavaScript transpile)
- Arduboy
- Pokitto
- Gamebuino META
- Arduboy (only experimental)
- Pokitto (32bit resource-limited embedded ARM)
- Gamebuino META (32bit resource-limited embedded ARM)
- TODO:
- PowerPC emulator (big endian)
- Android
- Windows
- **Many compile-time options** to tune the performance vs quality.
- **Well commented** and formatted code. Automatic documentation (comments + provided Doxyfile).
- **Well commented** and formatted code, with examples. Automatic documentation (comments + provided Doxyfile).
- Completely **free of legal restrictions**, do literally anything you want.
**NOTE**: Backwards compatibility isn't a goal of this libraray. It is meant to
@ -72,17 +73,14 @@ how to use
**Don't forget to compile with -O3!** This drastically improves performance.
For start take a look at the [testTerminal.c](https://gitlab.com/drummyfish/raycastlib/blob/master/programs/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).
For start take a look at the [helloWorld.c](https://gitlab.com/drummyfish/raycastlib/blob/master/programs/helloWorld.c) program and other examples.
For more examples see my [Pokitto demos](https://gitlab.com/drummyfish/Pokitto-Raycasting) 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:
- The library implements only a rendering back-end, it doesn't perform any drawing to the actual screen,
- The library implements only a **rendering back-end**, it doesn't perform any drawing to the actual screen,
hence there is no dependency on any library such as OpenGL or SDL. It just calls your front-end function
and tells you which pixels you should write. How you do it is up to you.
- Before including the header, define `RCL_PIXEL_FUNCTION` to the name of a function you will use to
@ -101,15 +99,6 @@ The basic philosophy is:
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
----
- Transparency (conditional ray passing through).
- Doors in the middle of squares.
- Rolling doors for `RCL_renderComplex`.
- Possibly merge all rendering functions into one.
- Fix rendering bug that happens at the boundary of positive and negative square coords.
license
-------

View file

@ -1,8 +1,27 @@
#!/bin/bash
# Make script for raycastlib programs.
# by drummyfish
# released under CC0 1.0, public domain
if [ "$#" -ne 1 ]; then
echo "ERROR: expecting one argument, the name of program without extension (e.g. \"helloWorld\")"
exit 0
fi
clear; clear; g++ -x c -g -fmax-errors=5 -pedantic -Wall -Wextra -o $1 $1.c -lSDL2 2>&1 >/dev/null && ./$1
link=""
if [ "$1" = "testSDL" ]; then
link="-lSDL2"
fi
clear
clear
flags="-x c -g -O3 -pedantic -Wall -Wextra -o $1 $1.c ${link}"
compiler=gcc
#compiler=clang
echo "making:" ${compiler} ${flags}
${compiler} ${flags} > /dev/null 2>&1 && ./$1

View file

@ -1,5 +1,6 @@
/**
Tests for raycastlib.
General tests for raycastlib, use to test new version, different platforms
etc.
license: CC0
*/
@ -477,7 +478,7 @@ int main()
RCL_Unit scaled = RCL_perspectiveScaleHorizontal(size,distance);
RCL_Unit distance2 = RCL_perspectiveScaleHorizontalInverse(size,scaled);
if (RCL_absVal(distance - distance2 > 2))
if (RCL_abs(distance - distance2 > 2))
printf("ERROR: distance: %d, distance inverse: %d\n",distance,distance2);
}
@ -552,9 +553,6 @@ int main()
t = measureTime(benchmarkRender);
printf("render 100 times: %ld ms\n",t);
printf("\n");
printProfile();
printf("\n===== all OK =====\n");
return 0;

View file

@ -1,5 +1,6 @@
/*
Raycasting terminal test.
Raycasting terminal test. Renders a raycasted animation in the terminal as
ASCII.
author: Miloslav Ciz
license: CC0 1.0, public domain
@ -79,8 +80,7 @@ void pixelFunc(RCL_PixelInfo *p)
switch (p->hit.direction)
{
case 0: shade += 2;
case 1: shade += p->texCoords.y / 512;
c = asciiShades[shade];
case 1: c = asciiShades[shade];
break;
case 2: c = 'o'; break;
case 3:

5
todo.txt Normal file
View file

@ -0,0 +1,5 @@
- Transparency (conditional ray passing through).
- Doors in the middle of squares.
- Rolling doors for `RCL_renderComplex`. Or perhaps remove rolling doors (KISS)
- Possibly merge all rendering functions into one.
- Fix rendering bug that happens at the boundary of positive and negative square coords.