精度、单位与常量
Minecraft scoreboard 使用 32 位有符号整数。VVE 与 Math3 通过定点数缩放表示小数。任何 API 的“字段名 + scale”才构成完整类型。
常见缩放
| 标注 | 整数中的 1.0 | 常见字段 |
|---|---|---|
1 | 1 | 质量、计数、状态 |
100 | 100 | 标量惯量、部分比例 |
1w | 10,000 | 坐标、线速度、局部轴、四元数、尺寸 |
100w | 1,000,000 | 角速度 |
例:x=1,250,000 表示 125 格;a=2,500 表示半边长 0.25 格。
坐标与速度
VVE 的普通离散运动是:
text
x += vx因此 vx 的直接含义是“每物理子步移动多少格”的 1w 定点数。把它解释为每秒速度时必须结合模拟器 rate/inv_dt 和 20 TPS。
角速度与四元数
角速度向量常用 100w,局部轴和四元数用 1w。不要把 angular_x=10000 当作与 quat_x=10000 同样的真实值;前者是 0.01,后者是 1.0。
四元数应保持单位化。连续整数近似会积累误差,VVE 的姿态接口负责归一化和重建派生局部轴;外部代码不要只改一个四元数分量。
质量与惯量
VVE 的质量是模型响应参数,不应自动等同现实 SI 单位。缩放关系仍应保持:
text
I ∝ mass × length²若尺寸乘 s、质量乘 m,惯量应近似乘 m × s²。张量模型应调用 _calc_tensor 重算,而不是把每个分量盲目乘同一经验值。
关键默认常量
vve:_consts 设置空气/流体摩擦、浮力、水/岩浆、实体与实心材质、附着/反弹阈值、重力等共享假玩家。具体整数值是 VVE 3.0.1 实现细节,业务代码应:
- 每个模拟器轮次先调用
vve:_consts; - 只覆盖自己明确拥有的参数;
- 记录覆盖值与目标
rate/inv_dt; - 参数升级时跑行为回归,不只比较常量字面值。
溢出与精度
scoreboard 运算可能在乘法中先溢出再除法。Math3 函数通常通过拆分/缩放降低风险,但业务自定义公式仍应估算中间值。安全建议:
- 约束世界坐标和最大速度;
- 先约分/缩小再相乘;
- 使用库中已有向量/四元数函数;
- 为极端尺寸、质量和冲量写测试;
- 发现突然翻转或爆速时,检查中间乘积而不是只减小最终结果。
display 的浮点世界
物理定点状态最终会转换到实体 NBT 浮点 transformation。资源模型自己的 pivot 和默认 display transform 也会影响画面。验证物理时以 scores 为准,验证视觉时同时检查:
- 根实体 Pos;
- transformation translation/scale/rotations;
- item definition/model 的 display 变换;
- teleport/interpolation duration;
- 资源包是否实际加载。