mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-23 20:49:57 +01:00
Add comments
This commit is contained in:
parent
50df4a40f4
commit
d449c7b52e
1 changed files with 25 additions and 15 deletions
40
raycastlib.h
40
raycastlib.h
|
@ -1,9 +1,11 @@
|
||||||
#ifndef RAYCASTLIB_H
|
#ifndef RAYCASTLIB_H
|
||||||
#define RAYCASTLIB_H
|
#define RAYCASTLIB_H
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
raycastlib - Small C header-only raycasting library for embedded and low
|
||||||
|
performance computers, such as Arduino. Only uses integer math and stdint
|
||||||
|
standard library.
|
||||||
|
|
||||||
author: Miloslav "drummyfish" Ciz
|
author: Miloslav "drummyfish" Ciz
|
||||||
license: CC0
|
license: CC0
|
||||||
|
|
||||||
|
@ -15,10 +17,13 @@
|
||||||
clockwise, a full angle has UNITS_PER_SQUARE Units.
|
clockwise, a full angle has UNITS_PER_SQUARE Units.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define UNITS_PER_SQUARE 1024
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define UNITS_PER_SQUARE 1024 ///< No. of Units in a side of a spatial square.
|
||||||
|
|
||||||
typedef int32_t Unit; /**< Smallest spatial unit, there is UNITS_PER_SQUARE
|
typedef int32_t Unit; /**< Smallest spatial unit, there is UNITS_PER_SQUARE
|
||||||
units in a square's length. */
|
units in a square's length. This effectively
|
||||||
|
serves the purpose of a fixed-point arithmetic. */
|
||||||
|
|
||||||
#define logVector2D(v)\
|
#define logVector2D(v)\
|
||||||
printf("[%d,%d]\n",v.x,v.y);
|
printf("[%d,%d]\n",v.x,v.y);
|
||||||
|
@ -86,23 +91,23 @@ typedef struct
|
||||||
uint16_t maxSteps;
|
uint16_t maxSteps;
|
||||||
} RayConstraints;
|
} RayConstraints;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function used to retrieve the cells of the rendered scene. It should return
|
||||||
|
a "type" of given square as an integer (e.g. square height) - between squares
|
||||||
|
that return different numbers there is considered to be a collision.
|
||||||
|
*/
|
||||||
typedef int16_t (*ArrayFunction)(int16_t x, int16_t y);
|
typedef int16_t (*ArrayFunction)(int16_t x, int16_t y);
|
||||||
typedef void (*ColumnFunction)(HitResult *hits, uint16_t hitCount, uint16_t x,
|
|
||||||
Ray ray);
|
|
||||||
typedef void (*PixelFunction)(PixelInfo info);
|
typedef void (*PixelFunction)(PixelInfo info);
|
||||||
|
|
||||||
/**
|
typedef void
|
||||||
Casts a single ray and returns the first collision result.
|
(*ColumnFunction)(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Simple-interface function to cast a single ray.
|
||||||
|
|
||||||
@param Ray Ray to be cast.
|
|
||||||
@param arrayFunc Function that for x and y array coordinates (in squares, NOT
|
|
||||||
Units) returns a type of square (just a number) - transition
|
|
||||||
between two squares of different types (values) is considered
|
|
||||||
a collision).
|
|
||||||
@param constraints.maxSteps Maximum number of steps (in squares) to trace the ray.
|
|
||||||
@return The first collision result.
|
@return The first collision result.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HitResult castRay(Ray ray, ArrayFunction arrayFunc);
|
HitResult castRay(Ray ray, ArrayFunction arrayFunc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -494,6 +499,11 @@ void _columnFunction(HitResult *hits, uint16_t hitCount, uint16_t x, Ray ray)
|
||||||
{
|
{
|
||||||
HitResult hit = hits[j];
|
HitResult hit = hits[j];
|
||||||
|
|
||||||
|
/* FIXME/TODO: The adjusted (=orthogonal, camera-space) distance could
|
||||||
|
possibly be computed more efficiently by not computing Euclidean
|
||||||
|
distance at all, but rather compute the distance of the collision
|
||||||
|
point from the projection plane (line). */
|
||||||
|
|
||||||
Unit dist = // adjusted distance
|
Unit dist = // adjusted distance
|
||||||
(hit.distance * vectorsAngleCos(angleToDirection(_camera.direction),
|
(hit.distance * vectorsAngleCos(angleToDirection(_camera.direction),
|
||||||
ray.direction)) / UNITS_PER_SQUARE;
|
ray.direction)) / UNITS_PER_SQUARE;
|
||||||
|
|
Loading…
Reference in a new issue