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.linkLibrary(rl.artifact("raylib"));
|
||||||
exe.root_module.addImport("znoise", znoise.module("root"));
|
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.root_module.addIncludePath(b.path("src/c"));
|
||||||
exe.linkLibrary(znoise.artifact("FastNoiseLite"));
|
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.linkLibrary(rl.artifact("raylib"));
|
||||||
exe_unit_tests.root_module.addImport("znoise", znoise.module("root"));
|
exe_unit_tests.root_module.addImport("znoise", znoise.module("root"));
|
||||||
exe_unit_tests.linkLibrary(znoise.artifact("FastNoiseLite"));
|
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);
|
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);
|
raylib.SetWindowState(raylib.FLAG_FULLSCREEN_MODE);
|
||||||
|
|
||||||
var camera = raylib.Camera3D{
|
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 },
|
.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,
|
.fovy = 45,
|
||||||
.projection = raylib.CAMERA_PERSPECTIVE,
|
.projection = raylib.CAMERA_PERSPECTIVE,
|
||||||
};
|
};
|
||||||
|
|
@ -117,7 +117,7 @@ pub fn main() !void {
|
||||||
raylib.ClearBackground(raylib.BLACK);
|
raylib.ClearBackground(raylib.BLACK);
|
||||||
|
|
||||||
const right = v3.neg(v3.nor(v3.cross(camera.up, v3.sub(camera.target, camera.position))));
|
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();
|
const speed = @as(f32, if (raylib.IsKeyDown(raylib.KEY_LEFT_CONTROL)) 25 else 5) * raylib.GetFrameTime();
|
||||||
var movement = v3.new(0, 0, 0);
|
var movement = v3.new(0, 0, 0);
|
||||||
|
|
@ -133,8 +133,11 @@ pub fn main() !void {
|
||||||
moveCamera(&camera, v3.scl(v3.nor(movement), speed));
|
moveCamera(&camera, v3.scl(v3.nor(movement), speed));
|
||||||
|
|
||||||
const delta = raylib.GetMouseDelta();
|
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));
|
// on the first mouse movement, for some reason mouse delta is completely insane, so we just ignore too large deltas
|
||||||
camera.target = v3.add(camera.position, v3.rotate(v3.sub(camera.target, camera.position), right, -0.005 * delta.y));
|
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();
|
raylib.BeginDrawing();
|
||||||
defer raylib.EndDrawing();
|
defer raylib.EndDrawing();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue