diff --git a/Ray2f.c b/Ray2f.c index 4c80e26..8eb23d1 100644 --- a/Ray2f.c +++ b/Ray2f.c @@ -1,5 +1,4 @@ #include "CgeMath.h" -#include #include #define EPSILON 0.00001f @@ -10,15 +9,12 @@ int CgeRay2fIntersectLine(const float start[2], const float direction[2], float tmp1[2]; float denom, time; - /* Calculate intersection time */ denom = CgeVec2fDot(direction, line); time = (line[2] - CgeVec2fDot(line, start)) / denom; - /* Check for ray/plane parallel to each other or point is behing the ray. */ if (fabsf(denom) < EPSILON || time < 0.0f) return 0; - /* Compute intersection point */ CgeVec2fScale(direction, time, tmp1); CgeVec2fAdd(start, tmp1, out); *t = time; @@ -31,7 +27,6 @@ int CgeRay2fIntersectTime(const float aStart[2], const float aDirection[2], float tmp1[2], tmp2[2], tmp3[2]; float denom; - /* Rotate directions by 90 degrees and caluclate denom */ tmp1[0] = -aDirection[1]; tmp1[1] = aDirection[0]; tmp2[0] = -bDirection[1]; tmp2[1] = bDirection[0]; denom = CgeVec2fDot(tmp1, bDirection); @@ -39,7 +34,6 @@ int CgeRay2fIntersectTime(const float aStart[2], const float aDirection[2], if (fabsf(denom) < EPSILON) return 0; - /* Calculate segments offset and intersection times */ CgeVec2fSub(aStart, bStart, tmp3); *time1 = CgeVec2fDot(tmp3, tmp2) / denom; *time2 = CgeVec2fDot(tmp3, tmp1) / denom; @@ -89,16 +83,13 @@ int CgeSegment2fIntersectLine(const float start[2], const float end[2], float tmp[2]; float denom, time; - /* Calculate intersection time */ CgeVec2fSub(end, start, tmp); denom = CgeVec2fDot(tmp, line); time = (line[2] - CgeVec2fDot(line, start)) / denom; - /* Check for ray/plane parallel to each other or point is behing the ray. */ if (fabsf(denom) < EPSILON || time < 0.0f || time > 1.0f) return 0; - /* Compute intersection point */ CgeVec2fScale(tmp, time, tmp); CgeVec2fAdd(start, tmp, out); *t = time; @@ -134,7 +125,6 @@ int CgeRay2fIntersectBox2f(const float aStart[2], const float aDirection[2], timeNear = -1.0f / 0.0f; timeFar = 1.0f / 0.0f; - /* Check each axis for the minimal and maximum intersection time */ for (i = 0; i < 2; i++) { if (fabsf(aDirection[i]) < EPSILON) { if (aStart[i] < bMin[i] || aStart[i] > bMax[i]) diff --git a/Ray3f.c b/Ray3f.c index a0dcfd4..42b6ff8 100644 --- a/Ray3f.c +++ b/Ray3f.c @@ -10,15 +10,12 @@ int CgeRay3fIntersectPlane(const float start[3], const float direction[3], float tmp1[3]; float denom, time; - /* Calculate intersection time */ denom = CgeVec3fDot(direction, plane); time = (plane[3] - CgeVec3fDot(plane, start)) / denom; - /* Check for ray/plane parallel to each other or point is behing the ray. */ if (fabsf(denom) < EPSILON || time < 0.0f) return 0; - /* Compute intersection point */ CgeVec3fScale(direction, time, tmp1); CgeVec3fAdd(start, tmp1, out); *t = time; @@ -32,15 +29,12 @@ int CgeRay3fIntersectTriangle(const float start[3], const float direction[3], float tmp1[3], tmp2[3], tmp3[3]; float time; - /* Compute plane */ if (!CgePlaneFromPoints(a, b, c, plane)) return 0; - /* Compute intersection point in ray against plane */ if (!CgeRay3fIntersectPlane(start, direction, plane, &time, tmp3)) return 0; - /* Check if point inside rectangle */ CgeVec3fSub(b, a, tmp1); CgeVec3fSub(tmp3, a, tmp2); CgeVec3fCross(tmp2, tmp1, tmp1); @@ -59,7 +53,6 @@ int CgeRay3fIntersectTriangle(const float start[3], const float direction[3], if (CgeVec3fDot(tmp1, plane) < 0.0f) return 0; - /* Copy intersection point */ memcpy(out, tmp3, sizeof(tmp3)); *t = time; return 1; @@ -70,16 +63,13 @@ int CgeSegment3fIntersectPlane(const float start[3], const float end[3], float tmp[3]; float denom, time; - /* Calculate intersection time */ CgeVec3fSub(end, start, tmp); denom = CgeVec3fDot(tmp, plane); time = (plane[3] - CgeVec3fDot(plane, start)) / denom; - /* Check for ray/plane parallel to each other or point is behing the ray. */ if (fabsf(denom) < EPSILON || time < 0.0f || time > 1.0f) return 0; - /* Compute intersection point */ CgeVec3fScale(tmp, time, tmp); CgeVec3fAdd(start, tmp, out); *t = time; @@ -93,15 +83,12 @@ int CgeSegment3fIntersectTriangle(const float start[3], const float end[3], float tmp1[3], tmp2[3], tmp3[3]; float time; - /* Compute plane */ if (!CgePlaneFromPoints(a, b, c, plane)) return 0; - /* Compute intersection point in ray against plane */ if (!CgeSegment3fIntersectPlane(start, end, plane, &time, tmp3)) return 0; - /* Check if point inside rectangle */ CgeVec3fSub(b, a, tmp1); CgeVec3fSub(tmp3, a, tmp2); CgeVec3fCross(tmp2, tmp1, tmp1); @@ -120,7 +107,6 @@ int CgeSegment3fIntersectTriangle(const float start[3], const float end[3], if (CgeVec3fDot(tmp1, plane) < 0.0f) return 0; - /* Copy intersection point */ memcpy(out, tmp3, sizeof(tmp3)); *t = time; return 1; @@ -135,7 +121,6 @@ int CgeRay3fIntersectBox3f(const float aStart[3], const float aDirection[3], timeNear = -1.0f / 0.0f; timeFar = 1.0f / 0.0f; - /* Check each axis for the minimal and maximum intersection time */ for (i = 0; i < 3; i++) { if (fabsf(aDirection[i]) < EPSILON) { if (aStart[i] < bMin[i] || aStart[i] > bMax[i])