From 8bd60c3320be8519b4b5547e70a6b0f905281a52 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Thu, 5 Feb 2026 18:02:41 -0800 Subject: [PATCH] Increase wall collision sweep steps to prevent clipping --- src/rendering/camera_controller.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/rendering/camera_controller.cpp b/src/rendering/camera_controller.cpp index 72645e1b..8c6c3ea5 100644 --- a/src/rendering/camera_controller.cpp +++ b/src/rendering/camera_controller.cpp @@ -356,10 +356,10 @@ void CameraController::update(float deltaTime) { glm::vec3 startPos = *followTarget; glm::vec3 desiredPos = targetPos; float moveDist = glm::length(desiredPos - startPos); - // Adaptive CCD: keep per-step movement short, especially on low FPS spikes. - int sweepSteps = std::max(1, std::min(4, static_cast(std::ceil(moveDist / 0.5f)))); + // Adaptive CCD: keep per-step movement short to avoid clipping through walls. + int sweepSteps = std::max(1, std::min(8, static_cast(std::ceil(moveDist / 0.3f)))); if (deltaTime > 0.04f) { - sweepSteps = std::min(6, std::max(sweepSteps, static_cast(std::ceil(deltaTime / 0.016f)))); + sweepSteps = std::min(12, std::max(sweepSteps, static_cast(std::ceil(deltaTime / 0.016f)))); } glm::vec3 stepPos = startPos; glm::vec3 stepDelta = (desiredPos - startPos) / static_cast(sweepSteps); @@ -782,9 +782,10 @@ void CameraController::update(float deltaTime) { glm::vec3 startFeet = camera->getPosition() - glm::vec3(0, 0, eyeHeight); glm::vec3 desiredFeet = newPos - glm::vec3(0, 0, eyeHeight); float moveDist = glm::length(desiredFeet - startFeet); - int sweepSteps = std::max(1, std::min(4, static_cast(std::ceil(moveDist / 0.5f)))); + // Adaptive CCD: keep per-step movement short to avoid clipping through walls. + int sweepSteps = std::max(1, std::min(8, static_cast(std::ceil(moveDist / 0.3f)))); if (deltaTime > 0.04f) { - sweepSteps = std::min(6, std::max(sweepSteps, static_cast(std::ceil(deltaTime / 0.016f)))); + sweepSteps = std::min(12, std::max(sweepSteps, static_cast(std::ceil(deltaTime / 0.016f)))); } glm::vec3 stepPos = startFeet; glm::vec3 stepDelta = (desiredFeet - startFeet) / static_cast(sweepSteps);