Skip to content

精度、单位与常量

Minecraft scoreboard 使用 32 位有符号整数。VVE 与 Math3 通过定点数缩放表示小数。任何 API 的“字段名 + scale”才构成完整类型。

常见缩放

标注整数中的 1.0常见字段
11质量、计数、状态
100100标量惯量、部分比例
1w10,000坐标、线速度、局部轴、四元数、尺寸
100w1,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 实现细节,业务代码应:

  1. 每个模拟器轮次先调用 vve:_consts
  2. 只覆盖自己明确拥有的参数;
  3. 记录覆盖值与目标 rate/inv_dt
  4. 参数升级时跑行为回归,不只比较常量字面值。

溢出与精度

scoreboard 运算可能在乘法中先溢出再除法。Math3 函数通常通过拆分/缩放降低风险,但业务自定义公式仍应估算中间值。安全建议:

  • 约束世界坐标和最大速度;
  • 先约分/缩小再相乘;
  • 使用库中已有向量/四元数函数;
  • 为极端尺寸、质量和冲量写测试;
  • 发现突然翻转或爆速时,检查中间乘积而不是只减小最终结果。

display 的浮点世界

物理定点状态最终会转换到实体 NBT 浮点 transformation。资源模型自己的 pivot 和默认 display transform 也会影响画面。验证物理时以 scores 为准,验证视觉时同时检查:

  • 根实体 Pos;
  • transformation translation/scale/rotations;
  • item definition/model 的 display 变换;
  • teleport/interpolation duration;
  • 资源包是否实际加载。

VVE 由小豆 8593 开发;本站是面向学习与查阅的增强文档。