根变换
在模型 JSON 的顶层添加 transform 条目,会提示加载器对所有几何体应用变换:方块模型在方块状态文件中的旋转之前应用;物品模型在显示变换之前应用。在 IUnbakedGeometry#bake() 中可通过 IGeometryBakingContext#getRootTransform() 获取该变换。自定义模型加载器可以完全忽略此字段。
原创说明图,依据 Forge 1.21.x 官方文档 绘制。
根变换可用两种格式指定:
-
包含单个
matrix条目的 JSON 对象,以嵌套数组表示原始变换矩阵,省略最后一行(3×4 矩阵,行主序)。该矩阵依次组合平移、左旋转、缩放、右旋转和变换原点。结构示例:"transform": { "matrix": [ [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0] ] } -
包含以下可选条目的任意组合的 JSON 对象:
origin:旋转和缩放的原点。translation:相对平移。rotation或left_rotation:缩放前围绕平移后原点旋转。scale:相对于平移后原点的缩放。right_rotation或post_rotation:缩放后围绕平移后原点旋转。
分元素指定
若以这些条目的组合指定变换,按 translation、left_rotation、scale、right_rotation 的顺序应用,最后将变换移动到指定原点。(原文此处称“选项 4”,但上方实际列有两种格式。)
以下带注释的示例用于说明结构;实际 JSON 文件不支持注释和省略号,应移除并补全。
{
"transform": {
"origin": "center",
"translation": [0, 0.5, 0],
"rotation": { "y": 45 }
},
// ...
}
原点
原点可以是三个浮点数构成的三维向量 [x, y, z],或以下默认值之一:"corner" 为 (0, 0, 0),"center" 为 (0.5, 0.5, 0.5),"opposing-corner" 为 (1, 1, 1)。未指定时默认为 "opposing-corner"。
平移
平移必须是三个浮点数构成的三维向量 [x, y, z],未指定时默认为 (0, 0, 0)。
左旋转和右旋转
旋转可用以下四种方式之一指定:
- 单个 JSON 对象,将一个轴映射到旋转角度:
{ "x": 90 }。 - 任意数量的上述对象组成的数组,按指定顺序应用:
[ { "x": 90 }, { "y": 45 }, { "x": -22.5 } ]。 - 三个浮点数的数组,以角度指定各轴旋转:
[90, 180, 45]。 - 四个浮点数的数组,直接指定四元数:
[0.38268346, 0, 0, 0.9238795],此例相当于绕 X 轴旋转 45 度。
未指定时默认不旋转。
缩放
缩放必须是三个浮点数构成的三维向量 [x, y, z],未指定时默认为 (1, 1, 1)。
原文:Root Transforms。