diff --git a/src/rendering/camera_controller.cpp b/src/rendering/camera_controller.cpp index 7db9c808..248d3263 100644 --- a/src/rendering/camera_controller.cpp +++ b/src/rendering/camera_controller.cpp @@ -191,8 +191,11 @@ void CameraController::update(float deltaTime) { // Compute camera position glm::vec3 actualCam; - if (actualDist < MIN_DISTANCE + 0.1f) { - actualCam = pivot + forward3D * 0.1f; + // Small offset prevents the camera from clipping into the character + // model when collision pushes it to near-minimum distance. + constexpr float kCameraClipEpsilon = 0.1f; + if (actualDist < MIN_DISTANCE + kCameraClipEpsilon) { + actualCam = pivot + forward3D * kCameraClipEpsilon; } else { actualCam = pivot + camDir * actualDist; } diff --git a/src/rendering/terrain_manager.cpp b/src/rendering/terrain_manager.cpp index 312f9168..a0944bb0 100644 --- a/src/rendering/terrain_manager.cpp +++ b/src/rendering/terrain_manager.cpp @@ -45,9 +45,13 @@ namespace { // Alpha map format constants constexpr size_t ALPHA_MAP_SIZE = 4096; // 64×64 uncompressed alpha bytes constexpr size_t ALPHA_MAP_PACKED = 2048; // 64×64 packed 4-bit alpha (half size) +static_assert(ALPHA_MAP_PACKED * 2 == ALPHA_MAP_SIZE, "packed alpha must unpack to full size"); constexpr uint8_t ALPHA_FILL_FLAG = 0x80; // RLE command: fill vs. copy constexpr uint8_t ALPHA_COUNT_MASK = 0x7F; // RLE command: count bits +// Random float normalization: mask to 16-bit then divide by max value to get [0..1] +constexpr float kRand16Max = 65535.0f; + // Placement transform constants constexpr float kDegToRad = 3.14159f / 180.0f; constexpr float kInv1024 = 1.0f / 1024.0f; @@ -1897,8 +1901,8 @@ void TerrainManager::generateGroundClutterPlacements(std::shared_ptr((fracX / 8.0f) * 63.0f), 0, 63); @@ -1965,8 +1969,8 @@ void TerrainManager::generateGroundClutterPlacements(std::shared_ptrm2Placements.push_back(p); @@ -2005,8 +2009,8 @@ void TerrainManager::generateGroundClutterPlacements(std::shared_ptrm2Placements.push_back(p); fallbackAdded++;