Repository navigation
Expand file tree
/
Copy path3d_anim.zig
More file actions
77 lines (62 loc) · 2.26 KB
/
Copy path3d_anim.zig
File metadata and controls
77 lines (62 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const std = @import("std");
const Example = @import("../example.zig").Example;
const raylib = @import("raylib");
const screenWidth: i32 = 1024;
const screenHeight: i32 = 800;
pub const example = Example{
.initFn = init,
.updateFn = update,
.deinitFn = deinit,
};
var camera: raylib.Camera3D = .{
.position = .{ .x = 10.0, .y = 20.0, .z = 10.0 },
.target = .{ .x = 0.0, .y = 5.0, .z = 0.0 },
.up = .{ .x = 0.0, .y = 1.0, .z = 0.0 },
.fovy = 45.0,
.projection = .CAMERA_PERSPECTIVE,
};
var model: raylib.Model = undefined;
var texture: raylib.Texture2D = undefined;
var animFrameCounter: u64 = 0;
var animsCount: i32 = 0;
var anims: ?[*]raylib.ModelAnimation = undefined;
fn init(_: std.mem.Allocator) !void {
raylib.InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free");
raylib.SetTargetFPS(60);
raylib.DisableCursor();
model = raylib.LoadModel("assets/guy.iqm");
texture = raylib.LoadTexture("assets/guytex.png");
raylib.SetMaterialTexture(model.materials, raylib.MATERIAL_MAP_DIFFUSE, texture);
anims = raylib.LoadModelAnimations("assets/guyanim.iqm", @as(?[*]i32, @ptrCast(&animsCount)));
}
fn update(_: f32) !void {
raylib.UpdateCamera(&camera, .CAMERA_ORBITAL);
if (raylib.IsKeyDown(.KEY_SPACE)) {
animFrameCounter += 1;
raylib.UpdateModelAnimation(model, anims.?[0], @as(i32, @intCast(animFrameCounter)));
if (animFrameCounter >= anims.?[0].frameCount) animFrameCounter = 0;
}
raylib.BeginDrawing();
defer raylib.EndDrawing();
raylib.ClearBackground(raylib.RAYWHITE);
raylib.BeginMode3D(camera);
defer raylib.EndMode3D();
raylib.DrawModelEx(
model,
raylib.Vector3{ .x = 0.0, .y = 0.0, .z = 0.0 },
raylib.Vector3{ .x = 1.0, .y = 0.0, .z = 0.0 },
-90.0,
raylib.Vector3{ .x = 1.0, .y = 1.0, .z = 1.0 },
raylib.WHITE,
);
for (0..@as(usize, @intCast(model.boneCount))) |i| {
raylib.DrawCube(anims.?[0].framePoses.?[@intCast(animFrameCounter)][i].translation, 0.2, 0.2, 0.2, raylib.RED);
}
raylib.DrawGrid(10, 1.0);
}
fn deinit() void {
raylib.UnloadModel(model);
raylib.UnloadTexture(texture);
raylib.CloseWindow();
raylib.UnloadModelAnimations(anims, animsCount);
}