added Sphere collision but might be broken and is very messy

This commit is contained in:
any
2026-07-26 14:59:49 +02:00
parent 31f259b4b5
commit 361eaefdb5
7 changed files with 306 additions and 6 deletions
+30
View File
@@ -0,0 +1,30 @@
#include "structs.h"
#include "math.h"
vec3 collisionPointSphere(ray *lightray, sphere *object)
{
vec3 collisionPoint;
collisionPoint.x = -1;
collisionPoint.y = -1;
collisionPoint.z = -1;
double a = lightray->direction.x * lightray->direction.x + lightray->direction.y * lightray->direction.y + lightray->direction.z * lightray->direction.z;
double b = 2 * ((lightray->direction.x * (lightray->origin.x - object->origin.x)) + (lightray->direction.y * (lightray->origin.y - object->origin.y)) + (lightray->direction.z * (lightray->origin.z - object->origin.z)));
double c = (lightray->origin.x * lightray->origin.x + object->origin.x * object->origin.x - 2 * lightray->origin.x * object->origin.x)
+ (lightray->origin.y * lightray->origin.y + object->origin.y * object->origin.y - 2 * lightray->origin.y * object->origin.y)
+ (lightray->origin.z * lightray->origin.z + object->origin.z * object->origin.z - 2 * lightray->origin.z * object->origin.z)
- object->radius * object->radius;
double discriminant = b * b - 4 * a * c;
if (discriminant < 0) return collisionPoint;
if (discriminant > 0) {
double S = (-b - sqrt(discriminant)) / (2 * a);
collisionPoint.x = S * lightray->direction.x + lightray->origin.x;
collisionPoint.y = S * lightray->direction.y + lightray->origin.y;
collisionPoint.z = S * lightray->direction.z + lightray->origin.z;
return collisionPoint;
}
double S = (-b)/(2*a);
collisionPoint.x = S * lightray->direction.x + lightray->origin.x;
collisionPoint.y = S * lightray->direction.y + lightray->origin.y;
collisionPoint.z = S * lightray->direction.z + lightray->origin.z;
return collisionPoint;
}