Body tĩnh, kinematic, động; nhân vật đi trên sàn và leo bậc; raycast. Tiếp...
Classes | |
| struct | njin::body3d_desc |
| Mô tả một body vật lý 3D cho body3d_create(). Tiếp... | |
| struct | njin::character3d_desc |
| Mô tả một nhân vật cho character3d_create(): hình viên nang đứng thẳng, đi trên sàn, leo bậc thấp, không trượt trên dốc thoải, bị tường chặn, và đẩy được body động. Tiếp... | |
| struct | njin::soft3d_hit |
| Chỗ một tia hay một khối đẩy trúng vật mềm, cho các bản physics3d_raycast(), physics3d_box_cast() và physics3d_hull_cast() có tham số soft. Tiếp... | |
| struct | njin::contact3d |
| Một sự kiện chạm của bước mô phỏng vừa rồi: hai body, hoặc một body và một nhân vật, bắt đầu hay thôi chạm nhau. Tiếp... | |
| struct | njin::joint3d_desc |
| Mô tả một khớp nối cho joint3d_create(). Tiếp... | |
| struct | njin::ragdoll3d_bone |
| Một phần của ragdoll: một xương của model thành một viên nang vật lý dọc theo trục y của xương (hướng của xương với rig của Blender). Tiếp... | |
| struct | njin::ragdoll3d_desc |
| Mô tả một ragdoll cho ragdoll3d_create(). Tiếp... | |
| struct | njin::softbody3d_desc |
| Mô tả một vật mềm cho softbody3d_create(). Tiếp... | |
| struct | njin::cloth3d_desc |
| Mô tả một tấm vải cho cloth3d_create(): một lưới chữ nhật columns x rows ô, nằm trong mặt phẳng x–y của nó (đứng thẳng như lá cờ, rèm cửa), tâm ở position. Tiếp... | |
| struct | njin::vehicle3d_wheel |
| Một bánh xe của njin::vehicle3d_desc. Tiếp... | |
| struct | njin::vehicle3d_desc |
| Mô tả một xe có bánh cho vehicle3d_create(). Tiếp... | |
| struct | njin::motorcycle3d_desc |
| Mô tả một xe máy cho motorcycle3d_create(): thân là một body động hình hộp size (hoặc bao lồi của model), một bánh trước lái trên phuộc nghiêng, một bánh sau kéo. Tiếp... | |
| struct | njin::tracked3d_desc |
| Mô tả một xe bánh xích (xe tăng, máy xúc) cho tracked3d_create(): thân là một body động hình hộp size (hoặc bao lồi của model), mỗi bên một dải xích chạy trên wheels_per_side bánh, bánh cuối mỗi bên là bánh kéo. Tiếp... | |
| struct | njin::body3d |
| Component: entity đi theo một body vật lý. Tiếp... | |
| struct | njin::character3d |
| Component: entity đi theo một nhân vật vật lý. Tiếp... | |
Enumerations | |
| enum | njin::body3d_motion { njin::body3d_static , njin::body3d_kinematic , njin::body3d_dynamic } |
| Cách một body vật lý 3D chuyển động. Tiếp... | |
| enum | njin::joint3d_kind { njin::joint3d_fixed , njin::joint3d_point , njin::joint3d_hinge , njin::joint3d_slider , njin::joint3d_distance , njin::joint3d_gear , njin::joint3d_rack , njin::joint3d_pulley } |
| Loại khớp nối của njin::joint3d_desc. Tiếp... | |
| enum | njin::softbody3d_kind { njin::softbody3d_box , njin::softbody3d_sphere , njin::softbody3d_mesh } |
| Hình dựng sẵn của một vật mềm (njin::softbody3d_desc::kind). Tiếp... | |
| enum | njin::cloth3d_edge : u8 { njin::cloth3d_top = 1 , njin::cloth3d_bottom = 2 , njin::cloth3d_left = 4 , njin::cloth3d_right = 8 } |
| Các cạnh của tấm vải, cộng lại được: cloth3d_top | cloth3d_left. Tiếp... | |
Các hàm | |
| body3d_handle | njin::body3d_create (context &ctx, const body3d_desc &desc) |
| Tạo một body vật lý 3D. | |
| void | njin::body3d_destroy (context &ctx, body3d_handle handle) |
| Hủy body. | |
| transform3d | njin::body3d_transform (const context &ctx, body3d_handle handle) |
| Vị trí và góc xoay hiện tại của body, để vẽ nó (scale luôn là 1). | |
| void | njin::body3d_set_position (context &ctx, body3d_handle handle, vec3 position, vec3 rotation={}) |
| Dời body tức thời tới vị trí mới (dịch chuyển, không va chạm trên đường đi), ví dụ khi đặt lại màn chơi. | |
| void | njin::body3d_move_kinematic (context &ctx, body3d_handle handle, vec3 position, vec3 rotation={}) |
| Cho một body kinematic tới position sau bước mô phỏng tới. | |
| vec3 | njin::body3d_velocity (const context &ctx, body3d_handle handle) |
| Vận tốc thẳng của body, đơn vị mỗi giây. | |
| void | njin::body3d_set_velocity (context &ctx, body3d_handle handle, vec3 velocity) |
| Đặt vận tốc thẳng của một body động. | |
| void | njin::body3d_add_impulse (context &ctx, body3d_handle handle, vec3 impulse) |
| Đẩy một body động một cú (xung lực, kg * đơn vị mỗi giây) tại tâm của nó: nổ, cú đá, đạn trúng. | |
| void | njin::body3d_add_force (context &ctx, body3d_handle handle, vec3 force) |
| Đẩy một body động bằng một lực (N, kg * đơn vị mỗi giây²) tại trọng tâm, trong bước vật lý tới: động cơ phản lực, gió, nam châm. | |
| void | njin::body3d_add_force (context &ctx, body3d_handle handle, vec3 force, vec3 point) |
| Như body3d_add_force(context &, body3d_handle, vec3) nhưng đặt lực tại point (thế giới): lực lệch tâm vừa đẩy vừa xoay body. | |
| void | njin::body3d_add_torque (context &ctx, body3d_handle handle, vec3 torque) |
| Xoay một body động bằng một mô-men (N·m) quanh trọng tâm, trong bước vật lý tới. | |
| vec3 | njin::body3d_angular_velocity (const context &ctx, body3d_handle handle) |
| Vận tốc góc của body: trục quay là hướng của vector, độ mỗi giây là độ dài của nó (quy tắc bàn tay phải). | |
| void | njin::body3d_carry (context &ctx, body3d_handle handle, f32 mass, vec3 point) |
| Cho bước vật lý kế tiếp, body động mang thêm một vật nặng mass kg đặt tại point: người treo hay leo trên nó (nhân vật đứng trên body thì engine tự làm), một thùng hàng không phải body. | |
| u64 | njin::body3d_user (const context &ctx, body3d_handle handle) |
| Số của game gắn vào body lúc tạo (njin::body3d_desc::user). | |
| character3d_handle | njin::character3d_create (context &ctx, const character3d_desc &desc) |
| Tạo một nhân vật. | |
| void | njin::character3d_destroy (context &ctx, character3d_handle handle) |
| Hủy nhân vật. | |
| void | njin::character3d_set_active (context &ctx, character3d_handle handle, bool active) |
| Bật hoặc tắt một nhân vật. | |
| bool | njin::character3d_active (const context &ctx, character3d_handle handle) |
| Nhân vật có đang bật không (character3d_set_active()). | |
| void | njin::character3d_set_velocity (context &ctx, character3d_handle handle, vec3 velocity) |
| Đặt vận tốc muốn có cho bước mô phỏng tới, đơn vị mỗi giây. | |
| vec3 | njin::character3d_velocity (const context &ctx, character3d_handle handle) |
| Vận tốc sau bước mô phỏng vừa rồi (đã bị tường, sàn chặn bớt). | |
| vec3 | njin::character3d_position (const context &ctx, character3d_handle handle) |
| Vị trí chân của nhân vật. | |
| void | njin::character3d_set_position (context &ctx, character3d_handle handle, vec3 position) |
| Dời nhân vật tức thời tới vị trí chân mới (hồi sinh, cổng dịch chuyển). | |
| bool | njin::character3d_grounded (const context &ctx, character3d_handle handle) |
| Nhân vật có đang đứng trên thứ gì đủ bằng phẳng không (sau bước mô phỏng vừa rồi). | |
| vec3 | njin::character3d_ground_velocity (const context &ctx, character3d_handle handle) |
| Vận tốc của thứ nhân vật đang đứng lên: bằng 0 trên sàn tĩnh, bằng vận tốc của bục trên một body kinematic. | |
| body3d_handle | njin::character3d_ground_body (const context &ctx, character3d_handle handle) |
| Body mà nhân vật đang đứng lên (để biết đã tới bục nào). | |
| softbody3d_handle | njin::character3d_ground_soft (const context &ctx, character3d_handle handle) |
| Vật mềm mà nhân vật đang đứng lên (nệm, bạt nhún, softbody3d_desc::walkable). | |
| vec3 | njin::physics3d_capsule_push (const context &ctx, vec3 a, vec3 b, f32 radius, body3d_handle ignore={}) |
| Vector đẩy ngắn nhất (minimum translation vector) đưa viên nang a–b bán kính radius ra khỏi mọi body nó đang lấn vào (không tính nhân vật, sensor và ignore): dời viên nang theo vector này là vừa hết chạm. | |
| vec3 | njin::physics3d_box_push (const context &ctx, vec3 center, vec3 rotation, vec3 size, body3d_handle ignore={}) |
| Như physics3d_capsule_push() cho một hộp (bàn chân, bàn tay đo từ da bằng model_bone_bounds()). | |
| ray3d_hit | njin::physics3d_box_cast (const context &ctx, vec3 center, vec3 rotation, vec3 size, vec3 motion, body3d_handle ignore={}, body3d_handle *body=nullptr) |
| Đẩy một hộp đi theo motion và tìm thứ đầu tiên nó chạm (không tính nhân vật, sensor, ignore và những gì hộp đã lấn vào từ đầu). | |
| ray3d_hit | njin::physics3d_box_cast (const context &ctx, vec3 center, vec3 rotation, vec3 size, vec3 motion, body3d_handle ignore, body3d_handle *body, soft3d_hit *soft) |
| Như physics3d_box_cast(), nhưng hộp chạm cả vật mềm (rèm, vải, bóng), không chỉ body. | |
| hull3d_handle | njin::physics3d_hull_create (context &ctx, const vec3 *points, i32 count) |
| Dựng một khối lồi từ các điểm (khối nhỏ nhất bọc hết chúng), để dò va chạm bằng đúng hình của một bộ phận: bàn chân, bàn tay lấy từ model_bone_points(). | |
| void | njin::physics3d_hull_destroy (context &ctx, hull3d_handle hull) |
| Hủy khối. | |
| vec3 | njin::physics3d_hull_push (const context &ctx, hull3d_handle hull, vec3 position, vec3 rotation, body3d_handle ignore={}) |
| Như physics3d_box_push() cho một khối lồi đặt ở position, xoay rotation. | |
| ray3d_hit | njin::physics3d_hull_cast (const context &ctx, hull3d_handle hull, vec3 position, vec3 rotation, vec3 motion, body3d_handle ignore={}, body3d_handle *body=nullptr) |
| Như physics3d_box_cast() cho một khối lồi. | |
| ray3d_hit | njin::physics3d_hull_cast (const context &ctx, hull3d_handle hull, vec3 position, vec3 rotation, vec3 motion, body3d_handle ignore, body3d_handle *body, soft3d_hit *soft) |
| Như physics3d_hull_cast(), chạm cả vật mềm như bản physics3d_box_cast() có soft. | |
| i32 | njin::physics3d_hull_lines (const context &ctx, hull3d_handle hull, vec3 *out, i32 count) |
| Các cạnh của khối, từng cặp điểm trong hệ trục riêng của nó, để vẽ debug. | |
| ray3d_hit | njin::physics3d_raycast (const context &ctx, const ray3d &ray, f32 max_distance, body3d_handle *body=nullptr) |
| Bắn một tia vào các body (không trúng nhân vật, đi xuyên sensor): đạn, tầm nhìn, chọn vật bằng chuột. | |
| ray3d_hit | njin::physics3d_raycast (const context &ctx, const ray3d &ray, f32 max_distance, body3d_handle *body, soft3d_hit *soft) |
| Như physics3d_raycast(), nhưng tia trúng cả vật mềm: bắn vào tấm rèm thì trúng rèm, không đi xuyên qua. | |
| i32 | njin::physics3d_contact_count (const context &ctx) |
| Số sự kiện chạm của bước mô phỏng vừa rồi. | |
| contact3d | njin::physics3d_contact (const context &ctx, i32 index) |
| Sự kiện chạm thứ index của bước mô phỏng vừa rồi. | |
| joint3d_handle | njin::joint3d_create (context &ctx, const joint3d_desc &desc) |
| Nối hai body (hoặc một body với thế giới) bằng một khớp. | |
| void | njin::joint3d_destroy (context &ctx, joint3d_handle handle) |
| Hủy khớp. | |
| void | njin::joint3d_set_motor (context &ctx, joint3d_handle handle, f32 speed) |
| Đặt tốc độ mô-tơ của một bản lề (độ mỗi giây) hay khớp trượt (đơn vị mỗi giây), trong giới hạn joint3d_desc::motor_force. | |
| f32 | njin::joint3d_position (const context &ctx, joint3d_handle handle) |
| Góc hiện tại của bản lề (độ) hoặc quãng trượt của khớp trượt (đơn vị), tính từ lúc tạo khớp. | |
| void | njin::joint3d_set_motor_force (context &ctx, joint3d_handle handle, f32 force) |
| Đổi lực tối đa của mô-tơ (joint3d_desc::motor_force) lúc đang chạy: chân ga, động cơ dây chun yếu dần khi dây nhả ra. | |
| f32 | njin::joint3d_speed (const context &ctx, joint3d_handle handle) |
| Tốc độ hiện tại của bản lề (độ mỗi giây, cùng chiều với joint3d_position()) hoặc của khớp trượt (đơn vị mỗi giây): đếm số vòng đã quay, lực đẩy cánh quạt. | |
| f32 | njin::joint3d_force (const context &ctx, joint3d_handle handle) |
| Lực khớp đang chịu để giữ hai body theo luật của nó (giữ điểm nối, giới hạn, mô-tơ, căng dây), ở bước vật lý vừa rồi, N. | |
| f32 | njin::joint3d_torque (const context &ctx, joint3d_handle handle) |
| Mô-men khớp đang chịu để giữ góc giữa hai body (bản lề giữ trục, giới hạn góc, mô-tơ, bánh răng truyền lực), ở bước vật lý vừa rồi, N·m. | |
| ragdoll3d_handle | njin::ragdoll3d_create (context &ctx, const ragdoll3d_desc &desc) |
| Biến một model có xương thành ragdoll: mỗi phần là một body động, nối với phần cha bằng khớp có giới hạn góc, rơi và va chạm như mọi body. | |
| void | njin::ragdoll3d_destroy (context &ctx, ragdoll3d_handle handle) |
| Hủy ragdoll cùng các body của nó. | |
| body3d_handle | njin::ragdoll3d_body (const context &ctx, ragdoll3d_handle handle, i32 part) |
| Body của một phần, để đẩy (body3d_add_impulse()), đọc vị trí, hay nhận ra phần bị trúng trong physics3d_raycast() và physics3d_contact(). | |
| shape3d | njin::ragdoll3d_shape (const context &ctx, ragdoll3d_handle handle, i32 part) |
| Hình va chạm của một phần, trong thế giới: viên nang (hoặc hình cầu) mà engine đo từ da, đặt theo body của phần đó lúc này. | |
| i32 | njin::ragdoll3d_bones (const context &ctx, ragdoll3d_handle handle, const transform3d &transform, bone_pose3d *out, i32 count) |
| Tư thế hiện tại của ragdoll, để vẽ model bằng model_pose::bones ở transform (thường là ragdoll3d_desc::transform). | |
| softbody3d_handle | njin::softbody3d_create (context &ctx, const softbody3d_desc &desc) |
| Tạo một vật mềm. | |
| softbody3d_handle | njin::cloth3d_create (context &ctx, const cloth3d_desc &desc) |
| Tạo một tấm vải: lá cờ, rèm, áo choàng, khăn trải bàn. | |
| void | njin::softbody3d_destroy (context &ctx, softbody3d_handle handle) |
| Hủy vật mềm cùng model của nó (softbody3d_model()). | |
| i32 | njin::softbody3d_vertex_count (const context &ctx, softbody3d_handle handle) |
| Số đỉnh của vật mềm. | |
| i32 | njin::softbody3d_vertices (const context &ctx, softbody3d_handle handle, vec3 *out, i32 count) |
| Vị trí hiện tại của các đỉnh, trong thế giới. | |
| i32 | njin::softbody3d_normals (const context &ctx, softbody3d_handle handle, vec3 *out, i32 count) |
| Pháp tuyến hiện tại của các đỉnh (độ dài 1, trung bình các tam giác chung đỉnh, hướng ra ngoài hay về phía trước của vải), để tự vẽ vật mềm. | |
| i32 | njin::softbody3d_indices (const context &ctx, softbody3d_handle handle, u32 *out, i32 count) |
| Các tam giác của mặt vật mềm, ba chỉ số đỉnh mỗi tam giác, ngược chiều kim đồng hồ nhìn từ ngoài (từ phía trước của vải, phía +z lúc tạo). | |
| model_handle | njin::softbody3d_model (context &ctx, softbody3d_handle handle) |
| Một model luôn có hình hiện tại của vật mềm, trong thế giới: engine cập nhật nó sau mỗi bước vật lý. | |
| i32 | njin::softbody3d_nearest (const context &ctx, softbody3d_handle handle, vec3 point) |
| Đỉnh gần point nhất, để ghim hay kéo một chỗ của vật mềm. | |
| void | njin::softbody3d_pin (context &ctx, softbody3d_handle handle, i32 vertex, bool pinned) |
| Ghim hay bỏ ghim một đỉnh. | |
| void | njin::softbody3d_move_pinned (context &ctx, softbody3d_handle handle, i32 vertex, vec3 position) |
| Cho một đỉnh bị ghim tới position sau bước vật lý tới, kéo phần còn lại theo: áo choàng ghim vào vai đang chạy, rèm kéo trên thanh treo. | |
| void | njin::softbody3d_set_wind (context &ctx, softbody3d_handle handle, vec3 wind) |
| Đặt gió thổi qua vật mềm, vận tốc của không khí (đơn vị mỗi giây). | |
| void | njin::softbody3d_add_impulse (context &ctx, softbody3d_handle handle, vec3 impulse) |
| Đẩy cả vật mềm một cú (xung lực, kg * đơn vị mỗi giây), chia đều cho các đỉnh không bị ghim: cú đá vào quả bóng. | |
| vec3 | njin::softbody3d_position (const context &ctx, softbody3d_handle handle) |
| Tâm của vật mềm (trung bình các đỉnh), để camera đi theo hay đặt âm thanh. | |
| u64 | njin::softbody3d_user (const context &ctx, softbody3d_handle handle) |
| Số của game gắn vào vật mềm lúc tạo. | |
| void | njin::softbody3d_draw_debug (context &ctx, softbody3d_handle handle, rgba color={0.3f, 0.9f, 1.0f, 1.0f}) |
| Vẽ vật mềm bằng gizmo (njin_gizmo.h) cho frame này: các cạnh của mặt, và đỉnh bị ghim là chấm đỏ. | |
| vehicle3d_handle | njin::vehicle3d_create (context &ctx, const vehicle3d_desc &desc) |
| Tạo một xe có bánh: thân xe là body động, mỗi bánh là một giảm xóc dò mặt đất (không phải body), có động cơ, hộp số tự động, vi sai, phanh và phanh tay. | |
| void | njin::vehicle3d_destroy (context &ctx, vehicle3d_handle handle) |
| Hủy xe cùng thân xe. | |
| void | njin::vehicle3d_set_input (context &ctx, vehicle3d_handle handle, f32 throttle, f32 steer, f32 brake, f32 handbrake) |
| Đặt cách lái cho bước vật lý tới. | |
| body3d_handle | njin::vehicle3d_body (const context &ctx, vehicle3d_handle handle) |
| Thân xe, để đọc vị trí (body3d_transform()), vận tốc, hay đẩy nó. | |
| i32 | njin::vehicle3d_wheel_count (const context &ctx, vehicle3d_handle handle) |
| Số bánh của xe. | |
| transform3d | njin::vehicle3d_wheel_transform (const context &ctx, vehicle3d_handle handle, i32 wheel) |
| Chỗ và góc của một bánh lúc này (đã tính giảm xóc, góc lái và bánh quay), trong thế giới. | |
| bool | njin::vehicle3d_wheel_grounded (const context &ctx, vehicle3d_handle handle, i32 wheel) |
| Bánh có đang chạm đất không. | |
| f32 | njin::vehicle3d_rpm (const context &ctx, vehicle3d_handle handle) |
| Vòng tua động cơ lúc này, cho tiếng máy và đồng hồ. | |
| i32 | njin::vehicle3d_gear (const context &ctx, vehicle3d_handle handle) |
| Số đang vào: -1 số lùi, 0 số không, 1 trở lên là số tiến. | |
| vehicle3d_handle | njin::motorcycle3d_create (context &ctx, const motorcycle3d_desc &desc) |
| Tạo một xe máy (bộ điều khiển xe máy của Jolt): một lò xo giữ xe đứng thẳng và nghiêng vào cua theo tốc độ và góc lái, nên xe không đổ khi đứng yên hay chạy chậm. | |
| vehicle3d_handle | njin::tracked3d_create (context &ctx, const tracked3d_desc &desc) |
| Tạo một xe bánh xích (bộ điều khiển xe xích của Jolt): rẽ bằng cách cho hai dải xích chạy khác tốc độ, quay tại chỗ khi chúng chạy ngược chiều nhau. | |
| void | njin::vehicle3d_set_tracks (context &ctx, vehicle3d_handle handle, f32 left, f32 right, f32 brake) |
| Điều khiển thẳng hai dải xích của xe bánh xích cho bước vật lý tới, giữ nguyên tới lần gọi sau: mỗi bên -1 (lùi hết cỡ) . | |
| f32 | njin::vehicle3d_track_speed (const context &ctx, vehicle3d_handle handle, i32 side) |
| Tốc độ của một dải xích, để cuộn ảnh xích theo đúng tốc độ xe chạy. | |
| void | njin::vehicle3d_draw_debug (context &ctx, vehicle3d_handle handle, rgba color={1.0f, 0.6f, 0.2f, 1.0f}) |
| Vẽ xe bằng gizmo (njin_gizmo.h) cho frame này: hộp thân xe, mỗi bánh là một vòng tròn với trục, giảm xóc từ chỗ gắn tới tâm bánh, và điểm bánh chạm đất (vàng). | |
| void | njin::physics3d_set_gravity (context &ctx, vec3 gravity) |
| Đặt trọng lực cho body động. | |
| vec3 | njin::physics3d_gravity (const context &ctx) |
| Trọng lực đang dùng cho body động. | |
Body tĩnh, kinematic, động; nhân vật đi trên sàn và leo bậc; raycast.
Dựng trên Jolt Physics.
| enum njin::body3d_motion |
Cách một body vật lý 3D chuyển động.
| Enumerator | |
|---|---|
| body3d_static | Đứng yên mãi: sàn, tường, bục cố định. Rẻ nhất. |
| body3d_kinematic | Game dời bằng body3d_move_kinematic(): bục di chuyển, cửa. Không bị vật khác đẩy, nhưng chở và đẩy được vật khác. |
| body3d_dynamic | Do vật lý điều khiển: rơi, va, lăn, bị đẩy. Thùng, bóng, mảnh vỡ. |
| enum njin::joint3d_kind |
Loại khớp nối của njin::joint3d_desc.
Hình dựng sẵn của một vật mềm (njin::softbody3d_desc::kind).
| enum njin::cloth3d_edge : u8 |
Các cạnh của tấm vải, cộng lại được: cloth3d_top | cloth3d_left.
| Enumerator | |
|---|---|
| cloth3d_top | Hàng đầu (hàng 0). |
| cloth3d_bottom | Hàng cuối. |
| cloth3d_left | Cột đầu (cột 0). |
| cloth3d_right | Cột cuối. |
| body3d_handle njin::body3d_create | ( | context & | ctx, |
| const body3d_desc & | desc ) |
Tạo một body vật lý 3D.
Engine mô phỏng mọi body ở phase_fixed_update, ngay sau các system của game trong phase đó.
| ctx | Context của engine. |
| desc | Mô tả body. |
| void njin::body3d_destroy | ( | context & | ctx, |
| body3d_handle | handle ) |
Hủy body.
Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| handle | Body cần hủy. |
| transform3d njin::body3d_transform | ( | const context & | ctx, |
| body3d_handle | handle ) |
Vị trí và góc xoay hiện tại của body, để vẽ nó (scale luôn là 1).
| ctx | Context của engine. |
| handle | Body. |
| void njin::body3d_set_position | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | position, | ||
| vec3 | rotation = {} ) |
Dời body tức thời tới vị trí mới (dịch chuyển, không va chạm trên đường đi), ví dụ khi đặt lại màn chơi.
Vận tốc giữ nguyên.
| ctx | Context của engine. |
| handle | Body. |
| position | Vị trí mới. |
| rotation | Góc xoay mới, độ. |
| void njin::body3d_move_kinematic | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | position, | ||
| vec3 | rotation = {} ) |
Cho một body kinematic tới position sau bước mô phỏng tới.
Engine đặt vận tốc của body sao cho nó tới đó đúng hạn, nên nhân vật và vật động đứng trên được chở theo. Gọi mỗi bước cố định với vị trí mới (bục đi qua lại, thang máy).
| ctx | Context của engine. |
| handle | Body kinematic. |
| position | Vị trí muốn tới. |
| rotation | Góc xoay muốn tới, độ. |
| vec3 njin::body3d_velocity | ( | const context & | ctx, |
| body3d_handle | handle ) |
Vận tốc thẳng của body, đơn vị mỗi giây.
| ctx | Context của engine. |
| handle | Body. |
| void njin::body3d_set_velocity | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | velocity ) |
Đặt vận tốc thẳng của một body động.
| ctx | Context của engine. |
| handle | Body. |
| velocity | Vận tốc mới, đơn vị mỗi giây. |
| void njin::body3d_add_impulse | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | impulse ) |
Đẩy một body động một cú (xung lực, kg * đơn vị mỗi giây) tại tâm của nó: nổ, cú đá, đạn trúng.
| ctx | Context của engine. |
| handle | Body. |
| impulse | Xung lực. |
| void njin::body3d_add_force | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | force ) |
Đẩy một body động bằng một lực (N, kg * đơn vị mỗi giây²) tại trọng tâm, trong bước vật lý tới: động cơ phản lực, gió, nam châm.
Khác body3d_add_impulse(), lực chỉ tác dụng một bước, nên gọi mỗi bước cố định khi còn đẩy. Các lực trong một bước cộng lại.
| ctx | Context của engine. |
| handle | Body. Không phải body động thì bỏ qua. |
| force | Lực. |
| void njin::body3d_add_force | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | force, | ||
| vec3 | point ) |
Như body3d_add_force(context &, body3d_handle, vec3) nhưng đặt lực tại point (thế giới): lực lệch tâm vừa đẩy vừa xoay body.
Cánh quạt đẩy một khung tại trục của nó, ống phụt khí ở mép một tấm ván.
| ctx | Context của engine. |
| handle | Body. Không phải body động thì bỏ qua. |
| force | Lực. |
| point | Điểm đặt lực, thế giới. |
| void njin::body3d_add_torque | ( | context & | ctx, |
| body3d_handle | handle, | ||
| vec3 | torque ) |
Xoay một body động bằng một mô-men (N·m) quanh trọng tâm, trong bước vật lý tới.
Chiều xoay theo quy tắc bàn tay phải quanh torque. Gọi mỗi bước cố định khi còn xoay.
| ctx | Context của engine. |
| handle | Body. Không phải body động thì bỏ qua. |
| torque | Mô-men. |
| vec3 njin::body3d_angular_velocity | ( | const context & | ctx, |
| body3d_handle | handle ) |
Vận tốc góc của body: trục quay là hướng của vector, độ mỗi giây là độ dài của nó (quy tắc bàn tay phải).
| ctx | Context của engine. |
| handle | Body. |
| void njin::body3d_carry | ( | context & | ctx, |
| body3d_handle | handle, | ||
| f32 | mass, | ||
| vec3 | point ) |
Cho bước vật lý kế tiếp, body động mang thêm một vật nặng mass kg đặt tại point: người treo hay leo trên nó (nhân vật đứng trên body thì engine tự làm), một thùng hàng không phải body.
Body nặng như cả hai cộng lại, có quán tính của vật nặng ở chỗ đó và sức nặng của nó xoay body quanh tâm, như nhân vật đứng lên (character3d_desc::mass): ván dựng vào tường trượt ra khi người leo lên cao, mà ván nhẹ không rung. Gọi mỗi bước cố định cho đến khi thôi mang.
| ctx | Context của engine. |
| handle | Body. Không phải body động thì bỏ qua. |
| mass | Khối lượng, kg. Không dương thì bỏ qua. |
| point | Chỗ đặt, thế giới; được giữ ở trong body. |
| u64 njin::body3d_user | ( | const context & | ctx, |
| body3d_handle | handle ) |
Số của game gắn vào body lúc tạo (njin::body3d_desc::user).
| ctx | Context của engine. |
| handle | Body. |
| character3d_handle njin::character3d_create | ( | context & | ctx, |
| const character3d_desc & | desc ) |
Tạo một nhân vật.
Game điều khiển nó bằng vận tốc: mỗi bước cố định gọi character3d_set_velocity() với vận tốc muốn có (cả trọng lực và cú nhảy do game tự cộng), engine di chuyển nó ngay sau đó, trượt dọc tường và dừng trên sàn.
| ctx | Context của engine. |
| desc | Mô tả nhân vật. |
| void njin::character3d_destroy | ( | context & | ctx, |
| character3d_handle | handle ) |
Hủy nhân vật.
Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| handle | Nhân vật. |
| void njin::character3d_set_active | ( | context & | ctx, |
| character3d_handle | handle, | ||
| bool | active ) |
Bật hoặc tắt một nhân vật.
Nhân vật tắt không được di chuyển, không va vào gì và nhân vật khác đi xuyên qua nó, nhưng vẫn giữ vị trí và đặt lại được bằng character3d_set_position(). Mỗi nhân vật bật tốn một lần tính va chạm mỗi bước vật lý, nên một đám đông lớn chỉ bật những người ở gần camera, còn người ở xa game tự dời theo đường đi (không ai thấy họ va chạm).
Các nhân vật (bật) chặn nhau: không đi xuyên qua nhau mà trượt vòng qua.
| ctx | Context của engine. |
| handle | Nhân vật. |
| active | true là bật (mặc định khi tạo). |
| bool njin::character3d_active | ( | const context & | ctx, |
| character3d_handle | handle ) |
Nhân vật có đang bật không (character3d_set_active()).
| ctx | Context của engine. |
| handle | Nhân vật. |
| void njin::character3d_set_velocity | ( | context & | ctx, |
| character3d_handle | handle, | ||
| vec3 | velocity ) |
Đặt vận tốc muốn có cho bước mô phỏng tới, đơn vị mỗi giây.
| ctx | Context của engine. |
| handle | Nhân vật. |
| velocity | Vận tốc. |
| vec3 njin::character3d_velocity | ( | const context & | ctx, |
| character3d_handle | handle ) |
Vận tốc sau bước mô phỏng vừa rồi (đã bị tường, sàn chặn bớt).
| ctx | Context của engine. |
| handle | Nhân vật. |
| vec3 njin::character3d_position | ( | const context & | ctx, |
| character3d_handle | handle ) |
Vị trí chân của nhân vật.
| ctx | Context của engine. |
| handle | Nhân vật. |
| void njin::character3d_set_position | ( | context & | ctx, |
| character3d_handle | handle, | ||
| vec3 | position ) |
Dời nhân vật tức thời tới vị trí chân mới (hồi sinh, cổng dịch chuyển).
| ctx | Context của engine. |
| handle | Nhân vật. |
| position | Vị trí chân mới. |
| bool njin::character3d_grounded | ( | const context & | ctx, |
| character3d_handle | handle ) |
Nhân vật có đang đứng trên thứ gì đủ bằng phẳng không (sau bước mô phỏng vừa rồi).
| ctx | Context của engine. |
| handle | Nhân vật. |
| vec3 njin::character3d_ground_velocity | ( | const context & | ctx, |
| character3d_handle | handle ) |
Vận tốc của thứ nhân vật đang đứng lên: bằng 0 trên sàn tĩnh, bằng vận tốc của bục trên một body kinematic.
Cộng vào vận tốc muốn có để nhân vật đi theo bục.
| ctx | Context của engine. |
| handle | Nhân vật. |
| body3d_handle njin::character3d_ground_body | ( | const context & | ctx, |
| character3d_handle | handle ) |
Body mà nhân vật đang đứng lên (để biết đã tới bục nào).
| ctx | Context của engine. |
| handle | Nhân vật. |
| softbody3d_handle njin::character3d_ground_soft | ( | const context & | ctx, |
| character3d_handle | handle ) |
Vật mềm mà nhân vật đang đứng lên (nệm, bạt nhún, softbody3d_desc::walkable).
Khi đó character3d_ground_body() không hợp lệ, còn character3d_ground_velocity() là vận tốc của mặt vật mềm dưới chân: cộng vào cú nhảy để bật cao hơn khi bạt đang nảy lên.
| ctx | Context của engine. |
| handle | Nhân vật. |
| vec3 njin::physics3d_capsule_push | ( | const context & | ctx, |
| vec3 | a, | ||
| vec3 | b, | ||
| f32 | radius, | ||
| body3d_handle | ignore = {} ) |
Vector đẩy ngắn nhất (minimum translation vector) đưa viên nang a–b bán kính radius ra khỏi mọi body nó đang lấn vào (không tính nhân vật, sensor và ignore): dời viên nang theo vector này là vừa hết chạm.
Để tay, thân của một nhân vật tự né tường thay vì xuyên qua.
| ctx | Context của engine. |
| a | Một đầu trục viên nang (tâm nửa cầu), thế giới. |
| b | Đầu kia. |
| radius | Bán kính. |
| ignore | Body không tính (vật nhân vật đang cầm). Không hợp lệ là tính hết. |
| vec3 njin::physics3d_box_push | ( | const context & | ctx, |
| vec3 | center, | ||
| vec3 | rotation, | ||
| vec3 | size, | ||
| body3d_handle | ignore = {} ) |
Như physics3d_capsule_push() cho một hộp (bàn chân, bàn tay đo từ da bằng model_bone_bounds()).
| ctx | Context của engine. |
| center | Tâm hộp, thế giới. |
| rotation | Góc xoay, độ, cùng thứ tự với njin::transform3d. |
| size | Kích thước theo x, y, z của hộp. |
| ignore | Body không tính. Không hợp lệ là tính hết. |
| ray3d_hit njin::physics3d_box_cast | ( | const context & | ctx, |
| vec3 | center, | ||
| vec3 | rotation, | ||
| vec3 | size, | ||
| vec3 | motion, | ||
| body3d_handle | ignore = {}, | ||
| body3d_handle * | body = nullptr ) |
Đẩy một hộp đi theo motion và tìm thứ đầu tiên nó chạm (không tính nhân vật, sensor, ignore và những gì hộp đã lấn vào từ đầu).
Như physics3d_raycast() nhưng cho cả một khối: thả bàn chân xuống để tìm chỗ đặt trên mặt gồ ghề.
| ctx | Context của engine. |
| center | Tâm hộp lúc bắt đầu, thế giới. |
| rotation | Góc xoay, độ, cùng thứ tự với njin::transform3d. |
| size | Kích thước theo x, y, z của hộp. |
| motion | Hướng và quãng đường đẩy. |
| ignore | Body không tính. Không hợp lệ là tính hết. |
| body | Nếu khác nullptr, nhận body bị chạm. |
| ray3d_hit njin::physics3d_box_cast | ( | const context & | ctx, |
| vec3 | center, | ||
| vec3 | rotation, | ||
| vec3 | size, | ||
| vec3 | motion, | ||
| body3d_handle | ignore, | ||
| body3d_handle * | body, | ||
| soft3d_hit * | soft ) |
Như physics3d_box_cast(), nhưng hộp chạm cả vật mềm (rèm, vải, bóng), không chỉ body.
Chạm vật mềm trước thì *body không hợp lệ và *soft cho biết vật mềm nào, tam giác nào; chạm body trước thì soft->soft không hợp lệ.
| ctx | Context của engine. |
| center | Tâm hộp lúc bắt đầu, thế giới. |
| rotation | Góc xoay, độ, cùng thứ tự với njin::transform3d. |
| size | Kích thước theo x, y, z của hộp. |
| motion | Hướng và quãng đường đẩy. |
| ignore | Body không tính. Không hợp lệ là tính hết. |
| body | Nếu khác nullptr, nhận body bị chạm. |
| soft | Nhận vật mềm bị chạm; nullptr thì bỏ qua vật mềm, như bản không có tham số này. |
| hull3d_handle njin::physics3d_hull_create | ( | context & | ctx, |
| const vec3 * | points, | ||
| i32 | count ) |
Dựng một khối lồi từ các điểm (khối nhỏ nhất bọc hết chúng), để dò va chạm bằng đúng hình của một bộ phận: bàn chân, bàn tay lấy từ model_bone_points().
Khối không phải là body: nó không va chạm, chỉ dùng cho physics3d_hull_push() và physics3d_hull_cast(). Dựng một lần, dùng mỗi khung ở vị trí và góc khác nhau.
| ctx | Context của engine. |
| points | Các điểm, trong hệ trục riêng của khối. |
| count | Số điểm (ít nhất 4, không cùng nằm trên một mặt phẳng). |
| void njin::physics3d_hull_destroy | ( | context & | ctx, |
| hull3d_handle | hull ) |
Hủy khối.
Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| hull | Khối. |
| vec3 njin::physics3d_hull_push | ( | const context & | ctx, |
| hull3d_handle | hull, | ||
| vec3 | position, | ||
| vec3 | rotation, | ||
| body3d_handle | ignore = {} ) |
Như physics3d_box_push() cho một khối lồi đặt ở position, xoay rotation.
| ctx | Context của engine. |
| hull | Khối. |
| position | Gốc hệ trục riêng của khối, thế giới. |
| rotation | Góc xoay, độ, cùng thứ tự với njin::transform3d. |
| ignore | Body không tính. Không hợp lệ là tính hết. |
| ray3d_hit njin::physics3d_hull_cast | ( | const context & | ctx, |
| hull3d_handle | hull, | ||
| vec3 | position, | ||
| vec3 | rotation, | ||
| vec3 | motion, | ||
| body3d_handle | ignore = {}, | ||
| body3d_handle * | body = nullptr ) |
Như physics3d_box_cast() cho một khối lồi.
| ctx | Context của engine. |
| hull | Khối. |
| position | Gốc hệ trục riêng của khối lúc bắt đầu, thế giới. |
| rotation | Góc xoay, độ, cùng thứ tự với njin::transform3d. |
| motion | Hướng và quãng đường đẩy. |
| ignore | Body không tính. Không hợp lệ là tính hết. |
| body | Nếu khác nullptr, nhận body bị chạm. |
| ray3d_hit njin::physics3d_hull_cast | ( | const context & | ctx, |
| hull3d_handle | hull, | ||
| vec3 | position, | ||
| vec3 | rotation, | ||
| vec3 | motion, | ||
| body3d_handle | ignore, | ||
| body3d_handle * | body, | ||
| soft3d_hit * | soft ) |
Như physics3d_hull_cast(), chạm cả vật mềm như bản physics3d_box_cast() có soft.
| ctx | Context của engine. |
| hull | Khối. |
| position | Gốc hệ trục riêng của khối lúc bắt đầu, thế giới. |
| rotation | Góc xoay, độ, cùng thứ tự với njin::transform3d. |
| motion | Hướng và quãng đường đẩy. |
| ignore | Body không tính. Không hợp lệ là tính hết. |
| body | Nếu khác nullptr, nhận body bị chạm. |
| soft | Nhận vật mềm bị chạm; nullptr thì bỏ qua vật mềm. |
| i32 njin::physics3d_hull_lines | ( | const context & | ctx, |
| hull3d_handle | hull, | ||
| vec3 * | out, | ||
| i32 | count ) |
Các cạnh của khối, từng cặp điểm trong hệ trục riêng của nó, để vẽ debug.
| ctx | Context của engine. |
| hull | Khối. |
| out | Mảng nhận điểm (cạnh thứ i là out[2i], out[2i + 1]), hoặc nullptr để chỉ đếm. |
| count | Số phần tử của out. |
| ray3d_hit njin::physics3d_raycast | ( | const context & | ctx, |
| const ray3d & | ray, | ||
| f32 | max_distance, | ||
| body3d_handle * | body = nullptr ) |
Bắn một tia vào các body (không trúng nhân vật, đi xuyên sensor): đạn, tầm nhìn, chọn vật bằng chuột.
| ctx | Context của engine. |
| ray | Tia (hướng độ dài 1). |
| max_distance | Xa nhất còn tính, đơn vị thế giới. |
| body | Nếu khác nullptr, nhận body bị trúng (không hợp lệ nếu trượt). |
| ray3d_hit njin::physics3d_raycast | ( | const context & | ctx, |
| const ray3d & | ray, | ||
| f32 | max_distance, | ||
| body3d_handle * | body, | ||
| soft3d_hit * | soft ) |
Như physics3d_raycast(), nhưng tia trúng cả vật mềm: bắn vào tấm rèm thì trúng rèm, không đi xuyên qua.
Trúng vật mềm trước thì *body không hợp lệ và *soft cho biết vật mềm, tam giác và đỉnh gần nhất (để đẩy chỗ bị bắn bằng softbody3d_add_impulse() hay ghim nó); trúng body trước thì soft->soft không hợp lệ.
| ctx | Context của engine. |
| ray | Tia (hướng độ dài 1). |
| max_distance | Xa nhất còn tính, đơn vị thế giới. |
| body | Nếu khác nullptr, nhận body bị trúng (không hợp lệ nếu trượt hay trúng vật mềm). |
| soft | Nhận vật mềm bị trúng; nullptr thì bỏ qua vật mềm, như bản không có tham số này. |
| i32 njin::physics3d_contact_count | ( | const context & | ctx | ) |
Số sự kiện chạm của bước mô phỏng vừa rồi.
Một cặp chỉ báo một lần khi bắt đầu chạm và một lần khi thôi chạm, dù chạm ở nhiều điểm. Engine mô phỏng ngay sau các system của game trong phase_fixed_update, nên đọc sự kiện trong phase đó: mỗi bước game thấy đúng sự kiện của bước trước, không sót, không lặp. Body bị hủy không có sự kiện thôi chạm.
| ctx | Context của engine. |
Sự kiện chạm thứ index của bước mô phỏng vừa rồi.
| ctx | Context của engine. |
| index | 0..physics3d_contact_count() - 1. |
| joint3d_handle njin::joint3d_create | ( | context & | ctx, |
| const joint3d_desc & | desc ) |
Nối hai body (hoặc một body với thế giới) bằng một khớp.
| ctx | Context của engine. |
| desc | Mô tả khớp. |
| void njin::joint3d_destroy | ( | context & | ctx, |
| joint3d_handle | handle ) |
Hủy khớp.
Hủy một body cũng hủy mọi khớp của nó. Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| handle | Khớp. |
| void njin::joint3d_set_motor | ( | context & | ctx, |
| joint3d_handle | handle, | ||
| f32 | speed ) |
Đặt tốc độ mô-tơ của một bản lề (độ mỗi giây) hay khớp trượt (đơn vị mỗi giây), trong giới hạn joint3d_desc::motor_force.
0 là đứng lại và giữ yên.
| ctx | Context của engine. |
| handle | Khớp có motor_force lớn hơn 0. |
| speed | Tốc độ. |
| f32 njin::joint3d_position | ( | const context & | ctx, |
| joint3d_handle | handle ) |
Góc hiện tại của bản lề (độ) hoặc quãng trượt của khớp trượt (đơn vị), tính từ lúc tạo khớp.
| ctx | Context của engine. |
| handle | Khớp. |
| void njin::joint3d_set_motor_force | ( | context & | ctx, |
| joint3d_handle | handle, | ||
| f32 | force ) |
Đổi lực tối đa của mô-tơ (joint3d_desc::motor_force) lúc đang chạy: chân ga, động cơ dây chun yếu dần khi dây nhả ra.
Lớn hơn 0 là bật mô-tơ (tốc độ giữ theo joint3d_set_motor(), mặc định 0 là giữ yên), 0 là tắt hẳn: khớp quay hay trượt tự do.
| ctx | Context của engine. |
| handle | Bản lề hoặc khớp trượt; loại khác bị bỏ qua. |
| force | Lực tối đa (bản lề: mô-men, N·m), không âm. |
| f32 njin::joint3d_speed | ( | const context & | ctx, |
| joint3d_handle | handle ) |
Tốc độ hiện tại của bản lề (độ mỗi giây, cùng chiều với joint3d_position()) hoặc của khớp trượt (đơn vị mỗi giây): đếm số vòng đã quay, lực đẩy cánh quạt.
| ctx | Context của engine. |
| handle | Khớp. |
| f32 njin::joint3d_force | ( | const context & | ctx, |
| joint3d_handle | handle ) |
Lực khớp đang chịu để giữ hai body theo luật của nó (giữ điểm nối, giới hạn, mô-tơ, căng dây), ở bước vật lý vừa rồi, N.
So với một ngưỡng để làm máy hỏng: lớn quá thì joint3d_destroy() (răng gãy, xích tuột, mối hàn bung).
| ctx | Context của engine. |
| handle | Khớp. |
| f32 njin::joint3d_torque | ( | const context & | ctx, |
| joint3d_handle | handle ) |
Mô-men khớp đang chịu để giữ góc giữa hai body (bản lề giữ trục, giới hạn góc, mô-tơ, bánh răng truyền lực), ở bước vật lý vừa rồi, N·m.
Tính quanh điểm khớp giữ: anchor của bản lề, nhưng tâm body a với njin::joint3d_fixed. Vì vậy tấm ván hàn vào tường mà bị đè chỉ báo lực (joint3d_force()), không báo mô-men ở chân; muốn đo mô-men bẻ gãy ở chân thì gắn bằng bản lề có giới hạn hẹp (min = -0.5, max = 0.5) đặt anchor tại đó.
| ctx | Context của engine. |
| handle | Khớp. |
| ragdoll3d_handle njin::ragdoll3d_create | ( | context & | ctx, |
| const ragdoll3d_desc & | desc ) |
Biến một model có xương thành ragdoll: mỗi phần là một body động, nối với phần cha bằng khớp có giới hạn góc, rơi và va chạm như mọi body.
Các phần của cùng một ragdoll không bao giờ va vào nhau, chỉ va với thế giới. Các xương không có phần (ngón tay, đầu ngón chân, gốc) đi theo phần gần nhất phía trên chúng.
| ctx | Context của engine. |
| desc | Mô tả ragdoll. |
| void njin::ragdoll3d_destroy | ( | context & | ctx, |
| ragdoll3d_handle | handle ) |
Hủy ragdoll cùng các body của nó.
Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| handle | Ragdoll. |
| body3d_handle njin::ragdoll3d_body | ( | const context & | ctx, |
| ragdoll3d_handle | handle, | ||
| i32 | part ) |
Body của một phần, để đẩy (body3d_add_impulse()), đọc vị trí, hay nhận ra phần bị trúng trong physics3d_raycast() và physics3d_contact().
Không hủy nó bằng body3d_destroy(): hủy cả ragdoll.
| ctx | Context của engine. |
| handle | Ragdoll. |
| part | Chỉ số trong ragdoll3d_desc::bones. |
| shape3d njin::ragdoll3d_shape | ( | const context & | ctx, |
| ragdoll3d_handle | handle, | ||
| i32 | part ) |
Hình va chạm của một phần, trong thế giới: viên nang (hoặc hình cầu) mà engine đo từ da, đặt theo body của phần đó lúc này.
Để vẽ debug, ví dụ bằng gizmo hay draw_shape3d().
| ctx | Context của engine. |
| handle | Ragdoll. |
| part | Chỉ số trong ragdoll3d_desc::bones. |
| i32 njin::ragdoll3d_bones | ( | const context & | ctx, |
| ragdoll3d_handle | handle, | ||
| const transform3d & | transform, | ||
| bone_pose3d * | out, | ||
| i32 | count ) |
Tư thế hiện tại của ragdoll, để vẽ model bằng model_pose::bones ở transform (thường là ragdoll3d_desc::transform).
| ctx | Context của engine. |
| handle | Ragdoll. |
| transform | Chỗ model sẽ được vẽ. |
| out | Mảng nhận tư thế, model_bone_count() phần tử. |
| count | Số phần tử của out. |
| softbody3d_handle njin::softbody3d_create | ( | context & | ctx, |
| const softbody3d_desc & | desc ) |
Tạo một vật mềm.
Vật mềm va chạm với mọi body (rơi lên sàn, quấn quanh thùng) và với nhau (njin::softbody3d_desc::collide_soft). Nhân vật (character3d_create()) đứng được trên mặt trên của nó, còn mặt đứng thì nhân vật đẩy các đỉnh sang bên khi đi qua, nên một tấm rèm không chặn đường. physics3d_raycast() và các hàm dò physics3d_*_push, _cast đi xuyên qua vật mềm; các bản có tham số njin::soft3d_hit thì trúng nó.
| ctx | Context của engine. |
| desc | Mô tả vật mềm. |
| softbody3d_handle njin::cloth3d_create | ( | context & | ctx, |
| const cloth3d_desc & | desc ) |
Tạo một tấm vải: lá cờ, rèm, áo choàng, khăn trải bàn.
Là một vật mềm như softbody3d_create() tạo ra, dùng chung các hàm softbody3d_*. Vẽ được từ cả hai mặt.
| ctx | Context của engine. |
| desc | Mô tả tấm vải. |
| void njin::softbody3d_destroy | ( | context & | ctx, |
| softbody3d_handle | handle ) |
Hủy vật mềm cùng model của nó (softbody3d_model()).
Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| handle | Vật mềm. |
| i32 njin::softbody3d_vertex_count | ( | const context & | ctx, |
| softbody3d_handle | handle ) |
Số đỉnh của vật mềm.
| ctx | Context của engine. |
| handle | Vật mềm. |
| i32 njin::softbody3d_vertices | ( | const context & | ctx, |
| softbody3d_handle | handle, | ||
| vec3 * | out, | ||
| i32 | count ) |
Vị trí hiện tại của các đỉnh, trong thế giới.
| ctx | Context của engine. |
| handle | Vật mềm. |
| out | Mảng nhận vị trí, hoặc nullptr để chỉ đếm. |
| count | Số phần tử của out. |
| i32 njin::softbody3d_normals | ( | const context & | ctx, |
| softbody3d_handle | handle, | ||
| vec3 * | out, | ||
| i32 | count ) |
Pháp tuyến hiện tại của các đỉnh (độ dài 1, trung bình các tam giác chung đỉnh, hướng ra ngoài hay về phía trước của vải), để tự vẽ vật mềm.
| ctx | Context của engine. |
| handle | Vật mềm. |
| out | Mảng nhận pháp tuyến, hoặc nullptr để chỉ đếm. |
| count | Số phần tử của out. |
| i32 njin::softbody3d_indices | ( | const context & | ctx, |
| softbody3d_handle | handle, | ||
| u32 * | out, | ||
| i32 | count ) |
Các tam giác của mặt vật mềm, ba chỉ số đỉnh mỗi tam giác, ngược chiều kim đồng hồ nhìn từ ngoài (từ phía trước của vải, phía +z lúc tạo).
| ctx | Context của engine. |
| handle | Vật mềm. |
| out | Mảng nhận chỉ số, hoặc nullptr để chỉ đếm. |
| count | Số phần tử của out. |
| model_handle njin::softbody3d_model | ( | context & | ctx, |
| softbody3d_handle | handle ) |
Một model luôn có hình hiện tại của vật mềm, trong thế giới: engine cập nhật nó sau mỗi bước vật lý.
Vẽ bằng draw_model() với transform mặc định, đổi màu và ảnh bằng model_material_set(). Model thuộc về vật mềm: không model_unload() nó, softbody3d_destroy() làm việc đó. Vải có cả mặt sau.
| ctx | Context của engine. |
| handle | Vật mềm. |
| i32 njin::softbody3d_nearest | ( | const context & | ctx, |
| softbody3d_handle | handle, | ||
| vec3 | point ) |
Đỉnh gần point nhất, để ghim hay kéo một chỗ của vật mềm.
| ctx | Context của engine. |
| handle | Vật mềm. |
| point | Điểm, thế giới. |
| void njin::softbody3d_pin | ( | context & | ctx, |
| softbody3d_handle | handle, | ||
| i32 | vertex, | ||
| bool | pinned ) |
Ghim hay bỏ ghim một đỉnh.
Đỉnh bị ghim đứng yên (trọng lực, va chạm, lò xo không dời được nó) cho đến khi softbody3d_move_pinned() dời nó.
| ctx | Context của engine. |
| handle | Vật mềm. |
| vertex | Chỉ số đỉnh. |
| pinned | true là ghim. |
| void njin::softbody3d_move_pinned | ( | context & | ctx, |
| softbody3d_handle | handle, | ||
| i32 | vertex, | ||
| vec3 | position ) |
Cho một đỉnh bị ghim tới position sau bước vật lý tới, kéo phần còn lại theo: áo choàng ghim vào vai đang chạy, rèm kéo trên thanh treo.
Gọi mỗi bước cố định với vị trí mới; không gọi nữa thì đỉnh đứng lại ở đó.
| ctx | Context của engine. |
| handle | Vật mềm. |
| vertex | Chỉ số một đỉnh bị ghim; đỉnh không bị ghim thì bỏ qua. |
| position | Vị trí muốn tới, thế giới. |
| void njin::softbody3d_set_wind | ( | context & | ctx, |
| softbody3d_handle | handle, | ||
| vec3 | wind ) |
Đặt gió thổi qua vật mềm, vận tốc của không khí (đơn vị mỗi giây).
Mặt nào chắn gió thì bị đẩy theo drag và diện tích của nó, nên vải bay phần phật còn bóng chỉ trôi nhẹ. Mặc định không có gió (không khí đứng yên vẫn cản vật mềm đang chuyển động).
| ctx | Context của engine. |
| handle | Vật mềm. |
| wind | Vận tốc gió. |
| void njin::softbody3d_add_impulse | ( | context & | ctx, |
| softbody3d_handle | handle, | ||
| vec3 | impulse ) |
Đẩy cả vật mềm một cú (xung lực, kg * đơn vị mỗi giây), chia đều cho các đỉnh không bị ghim: cú đá vào quả bóng.
| ctx | Context của engine. |
| handle | Vật mềm. |
| impulse | Xung lực. |
| vec3 njin::softbody3d_position | ( | const context & | ctx, |
| softbody3d_handle | handle ) |
Tâm của vật mềm (trung bình các đỉnh), để camera đi theo hay đặt âm thanh.
| ctx | Context của engine. |
| handle | Vật mềm. |
| u64 njin::softbody3d_user | ( | const context & | ctx, |
| softbody3d_handle | handle ) |
Số của game gắn vào vật mềm lúc tạo.
| ctx | Context của engine. |
| handle | Vật mềm. |
| void njin::softbody3d_draw_debug | ( | context & | ctx, |
| softbody3d_handle | handle, | ||
| rgba | color = {0.3f, 0.9f, 1.0f, 1.0f} ) |
Vẽ vật mềm bằng gizmo (njin_gizmo.h) cho frame này: các cạnh của mặt, và đỉnh bị ghim là chấm đỏ.
Gọi mỗi frame, ở phase nào cũng được.
| ctx | Context của engine. |
| handle | Vật mềm. |
| color | Màu các cạnh. |
| vehicle3d_handle njin::vehicle3d_create | ( | context & | ctx, |
| const vehicle3d_desc & | desc ) |
Tạo một xe có bánh: thân xe là body động, mỗi bánh là một giảm xóc dò mặt đất (không phải body), có động cơ, hộp số tự động, vi sai, phanh và phanh tay.
Lái bằng vehicle3d_set_input() mỗi bước cố định.
| ctx | Context của engine. |
| desc | Mô tả xe. |
| void njin::vehicle3d_destroy | ( | context & | ctx, |
| vehicle3d_handle | handle ) |
Hủy xe cùng thân xe.
Handle không hợp lệ bị bỏ qua.
| ctx | Context của engine. |
| handle | Xe. |
| void njin::vehicle3d_set_input | ( | context & | ctx, |
| vehicle3d_handle | handle, | ||
| f32 | throttle, | ||
| f32 | steer, | ||
| f32 | brake, | ||
| f32 | handbrake ) |
Đặt cách lái cho bước vật lý tới.
Giữ nguyên cho tới lần gọi sau. Dùng cho mọi loại xe: xe máy (motorcycle3d_create()) nghiêng vào cua theo steer; xe bánh xích (tracked3d_create()) rẽ bằng hai dải xích, quay tại chỗ khi gần đứng yên mà chỉ lái không ga, và handbrake là phanh.
| ctx | Context của engine. |
| handle | Xe. |
| throttle | Ga, -1 (lùi) .. 1 (tiến). Đang chạy tới mà ga âm thì xe phanh trước, dừng hẳn rồi mới lùi. |
| steer | Lái, -1 (trái) .. 1 (phải). |
| brake | Phanh, 0..1. |
| handbrake | Phanh tay, 0..1. |
| body3d_handle njin::vehicle3d_body | ( | const context & | ctx, |
| vehicle3d_handle | handle ) |
Thân xe, để đọc vị trí (body3d_transform()), vận tốc, hay đẩy nó.
Không hủy nó bằng body3d_destroy(): hủy cả xe.
| ctx | Context của engine. |
| handle | Xe. |
| i32 njin::vehicle3d_wheel_count | ( | const context & | ctx, |
| vehicle3d_handle | handle ) |
Số bánh của xe.
| ctx | Context của engine. |
| handle | Xe. |
| transform3d njin::vehicle3d_wheel_transform | ( | const context & | ctx, |
| vehicle3d_handle | handle, | ||
| i32 | wheel ) |
Chỗ và góc của một bánh lúc này (đã tính giảm xóc, góc lái và bánh quay), trong thế giới.
Trục y của transform là trục bánh, nên vẽ được bằng một hình trụ (njin::shape3d_cylinder, radius là bán kính bánh, height là bề rộng).
| ctx | Context của engine. |
| handle | Xe. |
| wheel | Chỉ số bánh. |
| bool njin::vehicle3d_wheel_grounded | ( | const context & | ctx, |
| vehicle3d_handle | handle, | ||
| i32 | wheel ) |
Bánh có đang chạm đất không.
| ctx | Context của engine. |
| handle | Xe. |
| wheel | Chỉ số bánh. |
| f32 njin::vehicle3d_rpm | ( | const context & | ctx, |
| vehicle3d_handle | handle ) |
Vòng tua động cơ lúc này, cho tiếng máy và đồng hồ.
| ctx | Context của engine. |
| handle | Xe. |
| i32 njin::vehicle3d_gear | ( | const context & | ctx, |
| vehicle3d_handle | handle ) |
Số đang vào: -1 số lùi, 0 số không, 1 trở lên là số tiến.
| ctx | Context của engine. |
| handle | Xe. |
| vehicle3d_handle njin::motorcycle3d_create | ( | context & | ctx, |
| const motorcycle3d_desc & | desc ) |
Tạo một xe máy (bộ điều khiển xe máy của Jolt): một lò xo giữ xe đứng thẳng và nghiêng vào cua theo tốc độ và góc lái, nên xe không đổ khi đứng yên hay chạy chậm.
Là một njin::vehicle3d_handle: lái bằng vehicle3d_set_input() (phanh tay khóa bánh sau), vẽ bằng vehicle3d_body() và vehicle3d_wheel_transform(), mọi hàm vehicle3d_* dùng được.
| ctx | Context của engine. |
| desc | Mô tả xe. |
| vehicle3d_handle njin::tracked3d_create | ( | context & | ctx, |
| const tracked3d_desc & | desc ) |
Tạo một xe bánh xích (bộ điều khiển xe xích của Jolt): rẽ bằng cách cho hai dải xích chạy khác tốc độ, quay tại chỗ khi chúng chạy ngược chiều nhau.
Là một njin::vehicle3d_handle: vehicle3d_set_input() lái như ô tô (đứng yên mà chỉ lái thì xe quay tại chỗ), vehicle3d_set_tracks() điều khiển từng dải xích, vehicle3d_track_speed() cho tốc độ xích để cuộn ảnh của nó.
| ctx | Context của engine. |
| desc | Mô tả xe. |
| void njin::vehicle3d_set_tracks | ( | context & | ctx, |
| vehicle3d_handle | handle, | ||
| f32 | left, | ||
| f32 | right, | ||
| f32 | brake ) |
Điều khiển thẳng hai dải xích của xe bánh xích cho bước vật lý tới, giữ nguyên tới lần gọi sau: mỗi bên -1 (lùi hết cỡ) .
. 1 (tiến hết cỡ). left = 1, right = -1 là quay tại chỗ sang phải. Xe không phải bánh xích thì bỏ qua.
| ctx | Context của engine. |
| handle | Xe bánh xích (tracked3d_create()). |
| left | Dải xích trái (phía +x). |
| right | Dải xích phải (phía -x). |
| brake | Phanh, 0..1. |
| f32 njin::vehicle3d_track_speed | ( | const context & | ctx, |
| vehicle3d_handle | handle, | ||
| i32 | side ) |
Tốc độ của một dải xích, để cuộn ảnh xích theo đúng tốc độ xe chạy.
| ctx | Context của engine. |
| handle | Xe bánh xích. |
| side | 0 là dải trái (+x), 1 là dải phải (-x). |
| void njin::vehicle3d_draw_debug | ( | context & | ctx, |
| vehicle3d_handle | handle, | ||
| rgba | color = {1.0f, 0.6f, 0.2f, 1.0f} ) |
Vẽ xe bằng gizmo (njin_gizmo.h) cho frame này: hộp thân xe, mỗi bánh là một vòng tròn với trục, giảm xóc từ chỗ gắn tới tâm bánh, và điểm bánh chạm đất (vàng).
Gọi mỗi frame, ở phase nào cũng được.
| ctx | Context của engine. |
| handle | Xe. |
| color | Màu thân và bánh. |
| void njin::physics3d_set_gravity | ( | context & | ctx, |
| vec3 | gravity ) |
Đặt trọng lực cho body động.
Mặc định {0, -9.81, 0}. Nhân vật không dùng giá trị này: game tự cộng trọng lực vào vận tốc của nó.
| ctx | Context của engine. |
| gravity | Gia tốc, đơn vị mỗi giây bình phương. |
| vec3 njin::physics3d_gravity | ( | const context & | ctx | ) |
Trọng lực đang dùng cho body động.
| ctx | Context của engine. |