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::softbody3d_desc Struct Tham chiếu

Mô tả một vật mềm cho softbody3d_create(). Tiếp...

#include <njin_physics3d.h>

Các thuộc tính Public

softbody3d_kind kind = softbody3d_sphere
 Hình.
vec3 position {0.0f, 0.0f, 0.0f}
 Tâm.
vec3 rotation {0.0f, 0.0f, 0.0f}
 Góc xoay, độ, cùng thứ tự với njin::transform3d.
vec3 size {1.0f, 1.0f, 1.0f}
 Kích thước của hộp theo x, y, z.
f32 radius = 0.5f
 Bán kính của mặt cầu.
i32 detail = 0
 Độ mịn.
mesh3d_data mesh {}
 Lưới cho softbody3d_mesh, trong hệ trục riêng của vật (đặt ở position, xoay rotation).
model_handle model {}
 Lấy lưới từ model này (model_load()) cho softbody3d_mesh, thay cho mesh, đặt như draw_model() vẽ nó với cùng position, rotation và scale.
vec3 scale {1.0f, 1.0f, 1.0f}
 Tỉ lệ của model.
f32 mass = 1.0f
 Khối lượng cả vật, kg, chia đều cho các đỉnh.
f32 stiffness = 0.9f
 Độ cứng của các cạnh, 0 (dãn như cao su non) .. 1 (không dãn).
f32 bend = 0.5f
 Độ cứng khi uốn, 0 (gập tự do) .. 1 (giữ dáng cong lúc tạo). Hộp không dùng.
f32 pressure = 0.0f
 Áp suất bên trong khi vật ở đúng hình lúc tạo, Pa (N/m²).
f32 friction = 0.5f
 Ma sát, 0..1.
f32 restitution = 0.0f
 Độ nảy, 0..1.
f32 damping = 0.1f
 Cản chuyển động: vận tốc giảm theo tỉ lệ này mỗi giây.
f32 drag = 1.0f
 Hệ số cản của không khí trên mặt của vật (gió, softbody3d_set_wind()).
const u32 * pinned = nullptr
 Các đỉnh bị ghim: đứng yên, hoặc theo softbody3d_move_pinned().
u32 pinned_count = 0
 Số phần tử của pinned.
u64 user = 0
 Số của game, đọc lại bằng softbody3d_user().
bool collide_soft = true
 Va chạm với các vật mềm khác cũng bật cờ này: hai tấm vải chồng lên nhau, bóng rơi lên nệm.
bool walkable = true
 Nhân vật đứng được trên mặt trên của nó (nệm, bạt nhún, khối thạch), lún xuống theo sức nặng của nhân vật (njin::character3d_desc::mass).

Mô tả chi tiết

Mô tả một vật mềm cho softbody3d_create().

Vật mềm là một đám điểm nối bằng lò xo, mỗi bước vật lý biến dạng theo trọng lực, va chạm và áp suất bên trong.

Đỉnh của vật mềm đánh số theo thứ tự engine dựng: với softbody3d_mesh là thứ tự đỉnh của lưới (lưới không có đỉnh trùng vị trí thì giữ nguyên chỉ số), còn với hộp và cầu thì tìm bằng softbody3d_nearest().

Thông tin về Member Data

◆ detail

i32 njin::softbody3d_desc::detail = 0

Độ mịn.

Hộp: số điểm trên cạnh dài nhất (2..16), các cạnh khác theo cùng khoảng cách. Cầu: số lần chia nhỏ khối 20 mặt (1..4: 42, 162, 642, 2562 đỉnh). 0 là mặc định: hộp 5 điểm, cầu chia 2 lần.

◆ mesh

mesh3d_data njin::softbody3d_desc::mesh {}

Lưới cho softbody3d_mesh, trong hệ trục riêng của vật (đặt ở position, xoay rotation).

Tam giác ngược chiều kim đồng hồ nhìn từ ngoài vào.

◆ pressure

f32 njin::softbody3d_desc::pressure = 0.0f

Áp suất bên trong khi vật ở đúng hình lúc tạo, Pa (N/m²).

Bóp nhỏ lại thì áp suất tăng, như bóng bay. 0 là không có (vật rỗng xẹp dần). Quả bóng 1 kg bán kính 0.5: khoảng 50 (mềm, lún khi chạm đất) đến 300 (căng); lớn hơn nữa thì các cạnh dãn ra và vật phồng to hơn lúc tạo. Cần một mặt kín.

◆ drag

f32 njin::softbody3d_desc::drag = 1.0f

Hệ số cản của không khí trên mặt của vật (gió, softbody3d_set_wind()).

0 là không khí không tác động.

◆ pinned

const u32* njin::softbody3d_desc::pinned = nullptr

Các đỉnh bị ghim: đứng yên, hoặc theo softbody3d_move_pinned().

Ghim và bỏ ghim lúc chạy bằng softbody3d_pin().

◆ collide_soft

bool njin::softbody3d_desc::collide_soft = true

Va chạm với các vật mềm khác cũng bật cờ này: hai tấm vải chồng lên nhau, bóng rơi lên nệm.

Mỗi đỉnh giữ cách mặt của vật kia một khoảng bằng độ dày của hai vật. false là đi xuyên qua vật mềm khác (rẻ hơn, khi chúng không bao giờ gặp nhau).

◆ walkable

bool njin::softbody3d_desc::walkable = true

Nhân vật đứng được trên mặt trên của nó (nệm, bạt nhún, khối thạch), lún xuống theo sức nặng của nhân vật (njin::character3d_desc::mass).

Mặt dựng đứng (rèm) thì nhân vật vẫn đi xuyên, đẩy các đỉnh sang bên. false là nhân vật không bao giờ đứng lên nó.