diff --git a/config.h b/config.h index b92b308a834f92c7d70877090bfde8349acbe391..70130742dd89eebc6dc49acb5ab828a2a5620aa5 100644 --- a/config.h +++ b/config.h @@ -16,6 +16,7 @@ #define PLAYER_JUMP_FORCE 400.0f #define PLAYER_HEIGHT 64.0f #define PLAYER_RADIUS 16.0f #define PLAYER_EYE_HEIGHT 56.0f +#define PLAYER_FOV 65.0f #define PLAYER_LEAN_ANGLE 25.0f #define PLAYER_LEAN_SPEED 8.0f diff --git a/game.c b/game.c index ad932a8aa5c8c467e9b1748cc0e7d244e99b5da8..168cae47b3e97e175c0a5ef3026a3a6b4e74d49b 100644 --- a/game.c +++ b/game.c @@ -95,7 +95,7 @@ // Default camera if no start found game.camera.position = (Vector3){ 0, 10, 0 }; game.camera.target = (Vector3){ 1, 10, 0 }; game.camera.up = (Vector3){ 0, 1, 0 }; - game.camera.fovy = 75.0f; + game.camera.fovy = PLAYER_FOV; game.camera.projection = CAMERA_PERSPECTIVE; int total_brushes = 0; diff --git a/player.c b/player.c index a8c039f6595cc35ceb9f24ff55f1e06e21bdf753..01c56ca70e9cec05a791592b08d69b2efbccca28 100644 --- a/player.c +++ b/player.c @@ -266,11 +266,14 @@ cosf(game.pitch) * sinf(game.yaw), -sinf(game.pitch), cosf(game.pitch) * cosf(game.yaw) }; + + // Use a stable world-up vector and apply lean roll Vector3 up = { 0, 1, 0 }; up = Vector3RotateByAxisAngle(up, forward, leanAngle); game.camera.up = up; - game.camera.target = Vector3Add(game.camera.position, forward); + // Use a longer target distance for better precision in the projection matrix + game.camera.target = Vector3Add(game.camera.position, Vector3Scale(forward, 20.0f)); // Calculate horizontal speed for UI if (dt > 0) {