From 68285eebfab71d5d9b807b6268ba737e1461375e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20=C4=8C=C3=AD=C5=BE?= Date: Sat, 22 Aug 2020 19:59:43 +0200 Subject: [PATCH] Correct bug --- assets/levelF.gif | Bin 4090 -> 4449 bytes raycastlib.h | 33 ++++++++++++++++++--------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/assets/levelF.gif b/assets/levelF.gif index a189bd5a1a22bfa591fce1a17125786d014cf7bd..31025dd30552403bd249b47979343e5ef4891163 100644 GIT binary patch delta 3534 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 I69EALJF9D?Jpcdz delta 3171 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 J1rh-P06R*E_K*Mo diff --git a/raycastlib.h b/raycastlib.h index 7683080..4c32116 100644 --- a/raycastlib.h +++ b/raycastlib.h @@ -26,7 +26,7 @@ author: Miloslav "drummyfish" Ciz license: CC0 1.0 - version: 0.907 + version: 0.908 */ #include @@ -825,18 +825,21 @@ void RCL_castRayMultiHit(RCL_Ray ray, RCL_ArrayFunction arrayFunc, #if RCL_RECTILINEAR /* Here we compute the fish eye corrected distance (perpendicular to - the projection plane) as the Euclidean distance divided by the length - of the ray direction vector. This can be computed without actually - computing Euclidean distances as a hypothenuse A (distance) divided - by hypothenuse B (length) is equal to leg A (distance along one axis) - divided by leg B (length along the same axis). */ + the projection plane) as the Euclidean distance (of hit from camera + position) divided by the length of the ray direction vector. This can + be computed without actually computing Euclidean distances as a + hypothenuse A (distance) divided by hypothenuse B (length) is equal to + leg A (distance along principal axis) divided by leg B (length along + the same principal axis). */ - h.distance = - (((h.position.x - ray.start.x) / 4) * - RCL_UNITS_PER_SQUARE * rayDirXRecip) - / (RECIP_SCALE / 4); +#define CORRECT(dir1,dir2)\ + RCL_Unit tmp = diff / 4; /* 4 to prevent overflow */ \ + h.distance = ((tmp / 8) != 0) ? /* prevent a bug with small dists */ \ + ((tmp * RCL_UNITS_PER_SQUARE * rayDir ## dir1 ## Recip) / (RECIP_SCALE / 4)):\ + RCL_abs(h.position.dir2 - ray.start.dir2); + + CORRECT(X,y) - // ^ / 4 is here to prevent overflow #endif } else @@ -856,10 +859,10 @@ void RCL_castRayMultiHit(RCL_Ray ray, RCL_ArrayFunction arrayFunc, ray.start.x + (ray.direction.x * diff * rayDirYRecip) / RECIP_SCALE; #if RCL_RECTILINEAR - h.distance = - (((h.position.y - ray.start.y) / 4) * - RCL_UNITS_PER_SQUARE * rayDirYRecip) - / (RECIP_SCALE / 4); + + CORRECT(Y,x) // same as above but for different axis + +#undef CORRECT // ^ / 4 is here to prevent overflow #endif