vve:object 刚体核心
vve:object 提供姿态、局部坐标系、角速度、碰撞点换算与响应应用。它不定义 _new/_del/tick/_class,不能独立实例化;block、box_object、cublock、cubox、vehicle 或你的 MOT 模块组合它。
核心临时状态
| 字段组 | 精度 | 含义 |
|---|---|---|
x/y/z | 1w | 质心坐标 |
vx/vy/vz | 1w | 线速度 |
angular_x/y/z | 100w | 世界角速度向量 |
angular_len | 100w | 角速度模长 |
ivec/jvec/kvec | 1w | 局部 u/v/w 轴 |
quat_x/y/z/w | 1w | 当前四元数 |
quat_start_*, quat_orth_*, quat_phi | 1w | 分段旋转状态 |
receiver | 多组 | 响应汇总区 |
姿态与运动接口
_anchor_to
从当前执行位置和朝向建立中心与初始姿态。要求世界实体执行者;内部可能通过实体位置/朝向做坐标换算。常用于创建前的临时对象。
execute as @e[tag=math_marker,limit=1] positioned 0 100 0 rotated 35 -10 run function vve:object/_anchor_to_rot_to
只按执行朝向重建姿态相关状态,适合保留中心位置时改变方向。调用前确保 object 临时字段已载入。
_iter_motion
按当前线速度推进中心,按角速度推进四元数相位并刷新局部轴。不探测介质、不施力、不自动同步实体。
_set_angular
读取 angular_x/y/z,从当前姿态重建新的旋转段。外部直接修改角速度分量后,应通过此接口保持 angular_len/start/orth/phi 一致,而不是只改三个分数。
_scale_angular
按输入 inp 缩放角速度,并维护派生旋转状态。输入精度以函数头注释为准。
碰撞点接口
_get_cpoint
输入局部 (u,v,w),输出世界碰撞点坐标、瞬时速度 v + ω×r。调用者负责设置 c_mass,再调用介质探测。
接收流水线
_clear_receiver
→ 对每个点:探测 → _receive_shift/_receive_impulse/…
→ _receive_over
→ 应用汇总响应探测后应立即接收,因为响应临时区会被下一点覆盖。
响应应用
| 接口 | 修改 |
|---|---|
_apply_shift | 中心位置 |
_apply_impulse | 线速度 + 由偏心作用点引起的角速度 |
_apply_impulse_f | 只应用汇总平动冲量 |
_apply_couple | 应用力偶矩到角速度 |
_apply_friction | 按汇总摩擦响应衰减运动 |
_dec_impulse | 将偏心冲量拆成平动冲量和 couple |
main_c 系列通常使用 _dec_impulse → _apply_impulse_f + _apply_couple。不要把传统 _apply_impulse 再叠加一次。
同步接口
_motion_data
根据当前中心、姿态/局部轴生成展示同步所需的结构化数据。它是计算数据,不等于已经修改世界实体。
_sync_motion
以实例为执行者,把物理状态写入根实体和 display transformation。模块可覆盖/扩展显示结构,但应保持物理中心、视觉 pivot、scale 与插值字段一致。
调试辅助
| 接口 | 用途 |
|---|---|
_poke_here* | 从执行位置/朝向施加测试冲量 |
_rotate_here* | 设置朝向某位置的旋转 |
_render_uvw* | 使用 GELib 显示局部轴 |
这些函数仍要求调用者已经准备质量/惯量以及正确执行上下文,不能把“辅助”理解为无前置条件的一键操作。