fix random camera movement on first frame after mouse movement

This commit is contained in:
catangent 2025-04-16 10:53:50 +01:00
parent e805891885
commit a163dcaedd
2 changed files with 9 additions and 6 deletions

View file

@ -50,9 +50,9 @@ pub fn main() !void {
raylib.SetWindowState(raylib.FLAG_FULLSCREEN_MODE);
var camera = raylib.Camera3D{
.position = raylib.Vector3{ .x = 0, .y = 23, .z = 0 },
.position = raylib.Vector3{ .x = 0, .y = 8, .z = 20 },
.up = raylib.Vector3{ .x = 0, .y = 1, .z = 0 },
.target = raylib.Vector3{ .x = 0, .y = 23-0.707, .z = 0.707 },
.target = raylib.Vector3{ .x = 0, .y = 8, .z = 19 },
.fovy = 45,
.projection = raylib.CAMERA_PERSPECTIVE,
};
@ -117,7 +117,7 @@ pub fn main() !void {
raylib.ClearBackground(raylib.BLACK);
const right = v3.neg(v3.nor(v3.cross(camera.up, v3.sub(camera.target, camera.position))));
const forward = v3.cross(right, v3.new(0, -1, 0));
const forward = v3.cross(right, v3.neg(camera.up));
const speed = @as(f32, if (raylib.IsKeyDown(raylib.KEY_LEFT_CONTROL)) 25 else 5) * raylib.GetFrameTime();
var movement = v3.new(0, 0, 0);
@ -133,8 +133,11 @@ pub fn main() !void {
moveCamera(&camera, v3.scl(v3.nor(movement), speed));
const delta = raylib.GetMouseDelta();
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), v3.new(0, 1, 0), -0.005 * delta.x));
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), right, -0.005 * delta.y));
// on the first mouse movement, for some reason mouse delta is completely insane, so we just ignore too large deltas
if(delta.x < 1000 and delta.y < 1000 and delta.x > -1000 and delta.y > -1000){
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), camera.up, -0.005 * delta.x));
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), right, -0.005 * delta.y));
}
raylib.BeginDrawing();
defer raylib.EndDrawing();