njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
njin_anim3d.h
1#pragma once
2#include "_types.h"
3#include "njin_3d.h"
4#include <functional>
5
6namespace njin {
7struct context;
8
11
17 i32 bone = -1;
19 f32 stiffness = 1.0f;
21 f32 drag = 0.4f;
22 f32 gravity = 0.0f;
23 vec3 gravity_dir{0.0f, -1.0f, 0.0f};
24 f32 radius = 0.02f;
25};
26
36
46
63
87i32 spring3d_update(context &ctx, spring3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt,
88 bone_pose3d *out, i32 count);
89
95void spring3d_reset(context &ctx, spring3d_handle handle);
96
100void spring3d_destroy(context &ctx, spring3d_handle handle);
101
112const char *bone_humanoid_name(const char *name);
113
121 const char *const *pairs = nullptr;
125 bool humanoid = true;
126};
127
143
158i32 retarget3d_pose(const context &ctx, retarget3d_handle handle, const model_pose &pose, bone_pose3d *out,
159 i32 count);
160
166i32 retarget3d_source_bone(const context &ctx, retarget3d_handle handle, i32 bone);
167
171void retarget3d_destroy(context &ctx, retarget3d_handle handle);
172
176 i32 upper = -1;
177 i32 lower = -1;
178 i32 foot = -1;
179};
180
187 const foot3d_leg *legs = nullptr;
191 f32 max_step = 0.5f;
193 f32 max_tilt = 35.0f;
196 f32 smoothing = 15.0f;
199 vec3 knee_forward{0.0f, 0.0f, 1.0f};
200};
201
211foot3d_handle foot3d_create(context &ctx, const foot3d_desc &desc);
212
216using foot3d_ground = std::function<bool(vec3 from, f32 distance, vec3 &point, vec3 &normal)>;
217
242i32 foot3d_update(context &ctx, foot3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt,
243 bone_pose3d *out, i32 count, f32 weight = 1.0f);
244
257i32 foot3d_update(context &ctx, foot3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt,
258 bone_pose3d *out, i32 count, const foot3d_ground &ground, f32 weight = 1.0f);
259
263f32 foot3d_hip_offset(const context &ctx, foot3d_handle handle);
264
268void foot3d_reset(context &ctx, foot3d_handle handle);
269
272void foot3d_destroy(context &ctx, foot3d_handle handle);
274} // namespace njin
void spring3d_destroy(context &ctx, spring3d_handle handle)
Hủy bộ lò xo.
foot3d_handle foot3d_create(context &ctx, const foot3d_desc &desc)
Tạo một bộ đặt chân cho một nhân vật: mỗi frame, mỗi bàn chân của animation được đặt lên mặt đất ngay...
void spring3d_reset(context &ctx, spring3d_handle handle)
Đặt lại: lần spring3d_update() sau, mọi xương lò xo bắt đầu đứng yên ở tư thế của animation.
spring3d_handle spring3d_create(context &ctx, const spring3d_desc &desc)
Tạo một bộ xương lò xo cho một nhân vật.
void foot3d_destroy(context &ctx, foot3d_handle handle)
Hủy bộ đặt chân.
i32 spring3d_update(context &ctx, spring3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count)
Chạy lò xo dt giây và ghi tư thế cuối của mọi xương vào out: tư thế pose (animation,...
std::function< bool(vec3 from, f32 distance, vec3 &point, vec3 &normal)> foot3d_ground
Mặt đất dưới một điểm, cho foot3d_update(): nhận điểm bắt đầu dò (thế giới) và quãng dò xuống; trả tr...
Definition njin_anim3d.h:216
f32 foot3d_hip_offset(const context &ctx, foot3d_handle handle)
Hông đang hạ bao nhiêu (đơn vị thế giới, âm là hạ xuống) sau lần foot3d_update() cuối,...
i32 retarget3d_source_bone(const context &ctx, retarget3d_handle handle, i32 bone)
Xương nguồn được ghép với xương bone của model đích, để kiểm tra cách ghép.
retarget3d_handle retarget3d_create(context &ctx, const retarget3d_desc &desc)
Chuẩn bị chép animation từ desc.source sang desc.target.
i32 retarget3d_pose(const context &ctx, retarget3d_handle handle, const model_pose &pose, bone_pose3d *out, i32 count)
Tư thế của model đích khi model nguồn ở tư thế pose.
const char * bone_humanoid_name(const char *name)
Tên chuẩn của một xương người (humanoid) từ tên của nó trong file: hiểu cách đặt tên của Mixamo (mixa...
void retarget3d_destroy(context &ctx, retarget3d_handle handle)
Hủy cách chép.
void foot3d_reset(context &ctx, foot3d_handle handle)
Đặt lại: lần foot3d_update() sau đặt chân ngay, không làm mượt từ chỗ cũ.
i32 foot3d_update(context &ctx, foot3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count, f32 weight=1.0f)
Đặt chân lên mặt đất và ghi tư thế cuối vào out, dò đất bằng physics3d_raycast() thẳng xuống dưới mỗi...
f32 distance(vec2 a, vec2 b)
Khoảng cách giữa hai điểm.
Definition _math.h:69
std::int32_t i32
Số nguyên có dấu 32 bit.
Definition _types.h:14
float f32
Số thực 32 bit.
Definition _types.h:28
std::uint32_t u32
Số nguyên không dấu 32 bit.
Definition _types.h:22
Một xương ở một tư thế: vị trí và ba trục của nó trong không gian của model (trước transform của lần ...
Definition njin_3d.h:771
Cách tạo một bộ đặt chân.
Definition njin_anim3d.h:183
vec3 knee_forward
Hướng đầu gối gập về phía đó, theo trục của model (thường là hướng nhìn).
Definition njin_anim3d.h:199
model_handle model
Model có xương, đứng ở gốc của nó (lòng bàn chân ở y = 0).
Definition njin_anim3d.h:184
f32 max_step
Chân với lên hay xuống tối đa bấy nhiêu so với gốc của lần vẽ, đơn vị thế giới.
Definition njin_anim3d.h:191
f32 smoothing
Độ nhanh bám theo mặt đất mới, mỗi giây.
Definition njin_anim3d.h:196
f32 max_tilt
Mặt nghiêng hơn bấy nhiêu độ thì bàn chân không nghiêng theo (vách, mép bậc).
Definition njin_anim3d.h:193
u32 leg_count
Số chân trong legs.
Definition njin_anim3d.h:188
const foot3d_leg * legs
Các chân.
Definition njin_anim3d.h:187
Định danh của một bộ đặt chân (IK chân chạm đất), tạo bởi foot3d_create().
Definition _types.h:215
Một chân cho foot3d: đùi, cẳng chân, bàn chân (model_bone_find()).
Definition njin_anim3d.h:175
i32 upper
Đùi.
Definition njin_anim3d.h:176
i32 lower
Cẳng chân.
Definition njin_anim3d.h:177
i32 foot
Bàn chân.
Definition njin_anim3d.h:178
Định danh của một model 3D, tạo bởi model_load().
Definition _types.h:153
Tư thế của một model có xương khi vẽ: animation nào, ở giây thứ mấy, và (tùy chọn) trộn với animation...
Definition njin_3d.h:620
Cách chép animation của model source sang model target có bộ xương khác: tên khác,...
Definition njin_anim3d.h:116
u32 pair_count
Số cặp.
Definition njin_anim3d.h:122
bool humanoid
Ghép tự động các xương còn lại: cùng tên chuẩn bone_humanoid_name(), hoặc cùng tên (bỏ tiền tố như mi...
Definition njin_anim3d.h:125
model_handle target
Model được vẽ (bộ xương đích).
Definition njin_anim3d.h:118
const char *const * pairs
Cặp tên xương do game ghép: pairs[2 * i] của nguồn đi với pairs[2 * i + 1] của đích.
Definition njin_anim3d.h:121
model_handle source
Model có các animation (bộ xương nguồn).
Definition njin_anim3d.h:117
Định danh của một cách chép animation từ bộ xương này sang bộ xương khác, tạo bởi retarget3d_create()...
Definition _types.h:209
Một chuỗi xương lò xo: xương bone và mọi xương nằm dưới nó (tóc, đuôi, râu, vạt áo).
Definition njin_anim3d.h:16
f32 gravity
Trọng lực kéo đầu xương, đơn vị mỗi giây.
Definition njin_anim3d.h:22
f32 drag
Lực cản, 0..1: 0 đung đưa mãi, 1 không đung đưa (chỉ trễ rồi về).
Definition njin_anim3d.h:21
vec3 gravity_dir
Hướng trọng lực trong thế giới, độ dài 1.
Definition njin_anim3d.h:23
f32 radius
Bán kính va chạm của đầu mỗi xương, đơn vị của model.
Definition njin_anim3d.h:24
i32 bone
Xương gốc của chuỗi (model_bone_find()).
Definition njin_anim3d.h:17
f32 stiffness
Lực kéo về tư thế của animation. Lớn: cứng, ít đung đưa. 0.5 đến 4 là thường.
Definition njin_anim3d.h:19
Một collider mà xương lò xo không xuyên qua (đầu, thân, vai), gắn vào một xương nên đi theo animation...
Definition njin_anim3d.h:30
vec3 offset
Tâm, theo ba trục của xương tính từ gốc của nó (đơn vị của model).
Definition njin_anim3d.h:32
vec3 tail
Đầu kia của capsule, cùng hệ trục với offset.
Definition njin_anim3d.h:33
i32 bone
Xương mang collider; -1 là gốc của model.
Definition njin_anim3d.h:31
f32 radius
Bán kính, đơn vị của model.
Definition njin_anim3d.h:34
Cách tạo một bộ xương lò xo.
Definition njin_anim3d.h:39
model_handle model
Model có xương.
Definition njin_anim3d.h:40
const spring3d_chain * chains
Các chuỗi. Một xương ở hai chuỗi thuộc chuỗi đầu.
Definition njin_anim3d.h:41
u32 chain_count
Số chuỗi.
Definition njin_anim3d.h:42
u32 collider_count
Số collider.
Definition njin_anim3d.h:44
const spring3d_collider * colliders
Các collider, dùng chung cho mọi chuỗi.
Definition njin_anim3d.h:43
Định danh của một bộ xương lò xo (tóc, đuôi, áo choàng), tạo bởi spring3d_create().
Definition _types.h:202
Vị trí, hướng và tỉ lệ của một vật 3D.
Definition njin_3d.h:504
Vị trí, góc xoay và tỉ lệ của một entity trong thế giới.
Definition _comps.h:14
Vector 3 chiều.
Definition _types.h:47