fix random camera movement on first frame after mouse movement
This commit is contained in:
parent
e805891885
commit
a163dcaedd
2 changed files with 9 additions and 6 deletions
|
|
@ -25,7 +25,6 @@ pub fn build(b: *std.Build) void {
|
|||
|
||||
exe.linkLibrary(rl.artifact("raylib"));
|
||||
exe.root_module.addImport("znoise", znoise.module("root"));
|
||||
exe.root_module.addIncludePath(b.path("raylib/src"));
|
||||
exe.root_module.addIncludePath(b.path("src/c"));
|
||||
exe.linkLibrary(znoise.artifact("FastNoiseLite"));
|
||||
|
||||
|
|
@ -49,6 +48,7 @@ pub fn build(b: *std.Build) void {
|
|||
exe_unit_tests.linkLibrary(rl.artifact("raylib"));
|
||||
exe_unit_tests.root_module.addImport("znoise", znoise.module("root"));
|
||||
exe_unit_tests.linkLibrary(znoise.artifact("FastNoiseLite"));
|
||||
exe_unit_tests.root_module.addIncludePath(b.path("src/c"));
|
||||
|
||||
const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
|
||||
|
||||
|
|
|
|||
13
src/main.zig
13
src/main.zig
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue