From f398b583ff1a7f066bb57cdddb7e41cc8b3fc12a Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sat, 14 Mar 2026 14:39:09 -0500 Subject: [PATCH] collision: sliding response --- src/collision_scene.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/collision_scene.cpp b/src/collision_scene.cpp index d8fe23d..e0f4c1a 100644 --- a/src/collision_scene.cpp +++ b/src/collision_scene.cpp @@ -347,6 +347,27 @@ namespace collision_scene { draw_cube(transform, center); } + ////////////////////////////////////////////////////////////////////// + // collision response + ////////////////////////////////////////////////////////////////////// + + if (min_intersected) { + XMVECTOR origin = min_intersection_point; + XMVECTOR normal = XMVector3Normalize(min_intersection_position - min_intersection_point); + glUniform3f(location.uniform.base_color, 0, 1.0, 1.0); + draw_line(transform, min_intersection_point, min_intersection_point + normal); + XMVECTOR destination = sphere.center + direction; + float eq3 = -XMVectorGetX(XMVector3Dot(normal, origin)); + float distance = XMVectorGetX(XMVector3Dot(destination, normal)) + eq3; + XMVECTOR new_destination = destination - normal * distance; + new_destination += normal * sphere.radius; + XMVECTOR new_direction = new_destination - min_intersection_position; + + glUniform3f(location.uniform.base_color, 1.0, 0.5, 1.0); + draw_line(transform, min_intersection_position, min_intersection_position + new_direction); + + } + glUniform3f(location.uniform.base_color, 0, 0.0, 1.0); draw_sphere(transform, point_position[0], 0.5); glUniform3f(location.uniform.base_color, 0, 0.5, 1.0);