mirror of
https://git.coom.tech/drummyfish/raycastlib.git
synced 2024-11-24 20:59:58 +01:00
equilinear -> rectilinear
This commit is contained in:
parent
e52fb3e665
commit
e77cbe1a25
1 changed files with 7 additions and 7 deletions
14
raycastlib.h
14
raycastlib.h
|
@ -78,8 +78,8 @@
|
||||||
2: octagonal approximation (LQ) */
|
2: octagonal approximation (LQ) */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef RCL_EQUILINEAR
|
#ifndef RCL_RECTILINEAR
|
||||||
#define RCL_EQUILINEAR 1 /**< Whether to use equilinear perspective (normally
|
#define RCL_RECTILINEAR 1 /**< Whether to use rectilinear perspective (normally
|
||||||
used), or curvilinear perspective (fish eye). */
|
used), or curvilinear perspective (fish eye). */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
RCL_Unit distance; /**< Distance to the hit position, or -1 if no
|
RCL_Unit distance; /**< Distance to the hit position, or -1 if no
|
||||||
collision happened. If RCL_EQUILINEAR != 0, then
|
collision happened. If RCL_RECTILINEAR != 0, then
|
||||||
the distance is perpendicular to the projection
|
the distance is perpendicular to the projection
|
||||||
plane (fish eye correction), otherwise it is
|
plane (fish eye correction), otherwise it is
|
||||||
the straight distance to the ray start
|
the straight distance to the ray start
|
||||||
|
@ -318,7 +318,7 @@ RCL_PixelInfo RCL_mapToScreen(RCL_Vector2D worldPosition, RCL_Unit height,
|
||||||
/**
|
/**
|
||||||
Casts a single ray and returns a list of collisions.
|
Casts a single ray and returns a list of collisions.
|
||||||
|
|
||||||
@param ray ray to be cast, if RCL_EQUILINEAR != 0 then the computed hit
|
@param ray ray to be cast, if RCL_RECTILINEAR != 0 then the computed hit
|
||||||
distance is divided by the ray direction vector length (to correct
|
distance is divided by the ray direction vector length (to correct
|
||||||
the fish eye effect)
|
the fish eye effect)
|
||||||
@param arrayFunc function that will be used to determine collisions (hits)
|
@param arrayFunc function that will be used to determine collisions (hits)
|
||||||
|
@ -839,7 +839,7 @@ void RCL_castRayMultiHit(RCL_Ray ray, RCL_ArrayFunction arrayFunc,
|
||||||
h.position.y = ray.start.y + ((ray.direction.y * diff) /
|
h.position.y = ray.start.y + ((ray.direction.y * diff) /
|
||||||
RCL_nonZero(ray.direction.x));
|
RCL_nonZero(ray.direction.x));
|
||||||
|
|
||||||
#if RCL_EQUILINEAR
|
#if RCL_RECTILINEAR
|
||||||
/* Here we compute the fish eye corrected distance (perpendicular to
|
/* Here we compute the fish eye corrected distance (perpendicular to
|
||||||
the projection plane) as the Euclidean distance divided by the length
|
the projection plane) as the Euclidean distance divided by the length
|
||||||
of the ray direction vector. This can be computed without actually
|
of the ray direction vector. This can be computed without actually
|
||||||
|
@ -867,14 +867,14 @@ void RCL_castRayMultiHit(RCL_Ray ray, RCL_ArrayFunction arrayFunc,
|
||||||
h.position.x = ray.start.x + ((ray.direction.x * diff) /
|
h.position.x = ray.start.x + ((ray.direction.x * diff) /
|
||||||
RCL_nonZero(ray.direction.y));
|
RCL_nonZero(ray.direction.y));
|
||||||
|
|
||||||
#if RCL_EQUILINEAR
|
#if RCL_RECTILINEAR
|
||||||
h.distance =
|
h.distance =
|
||||||
((h.position.y - ray.start.y) * RCL_UNITS_PER_SQUARE) /
|
((h.position.y - ray.start.y) * RCL_UNITS_PER_SQUARE) /
|
||||||
RCL_nonZero(ray.direction.y);
|
RCL_nonZero(ray.direction.y);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !RCL_EQUILINEAR
|
#if !RCL_RECTILINEAR
|
||||||
h.distance = RCL_dist(h.position,ray.start);
|
h.distance = RCL_dist(h.position,ray.start);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue