Files
tech5/source/shared/idlib/bv/sphere.cpp
T
2026-08-08 19:30:03 -07:00

19 lines
693 B
C++

#include "sphere.h"
bool idSphere::LineIntersection(const idVec3& start, const idVec3& end) const {
const idVec3 fromCenter = start - origin;
const idVec3 direction = end - start;
const float projection = -fromCenter.Dot(direction);
if (projection <= 0.0f) return fromCenter.LengthSqr() < radius * radius;
const float directionLengthSqr = direction.LengthSqr();
if (projection >= directionLengthSqr) {
const idVec3 endFromCenter = end - origin;
return endFromCenter.LengthSqr() < radius * radius;
}
const idVec3 closest = fromCenter
+ direction * (projection / directionLengthSqr);
return closest.LengthSqr() < radius * radius;
}