Skip to content

定义体积模型

体积模型是一种渲染复杂模型相对方便的方式。对体积模型应用纹理的方法与简单实心方块和长方体模型类似——每六面纹理会应用至模型子块的对应面,同时纹理缩放到完整方块面的大小。因此,纹理定义文件内的纹理定义与简单实心方块和长方体模型相同。

体积模型通过给定常量(即缩放比例)将方块的三轴进行分割,此常量一般为 2 的 n 次幂(1、2、4、8,至多 16)。模型由这些方块的排布组合而成。

模型由多行配置组成:首行为 block 设置,有如下属性:

  • id - 使用此模型的方块 ID。需要指定至少一个 id 属性,但数量不限——允许同一模型用在多个方块。见“方块 ID 数字”了解如何指定方块 ID 数字的详情。
  • data - 对模型应用的方块增加匹配数据值的要求。默认值 data=* 表示匹配所有对应 id 属性下带有任何数据值的方块。否则,只匹配一或多个 data=数字 元数据的方块。
  • scale - 模型三轴的划分数量。使得立方体划分为不同大小的子块,每个子块都是按比例缩小的子块。

例如,活塞延伸部分的体积模型可以将其划分为三轴上的八个部分:

txt
  block:id=34,data=0,data=8,scale=8

block 设置之后,可以定义一或多层方块——从第零层(底层)到第 scale -1 层(顶层)。每层都有一个 layer 设置,表现为逗号分隔的数字列表,用于定义层数(若同一子块使用了相同样式,那么只需定义一次)。layer 之后的下一比例决定了子块的样式:每一行都表示 Z 轴(由低到高,顺序越靠后越高)上的一层方块,每一行都有 scale 设置(表示 X 轴上由低到高的子块)——用 * 表示被占据的部分,或 - 表示不被占据的部分。任何未指定的层数默认视作空白。

例如,对于面朝下伸出的活塞臂,完整定义配置如下:

txt
  block:id=34,data=0,data=8,scale=8
  layer:2,3,4,5,6,7
  --------
  --------
  --------
  ---**---
  ---**---
  --------
  --------
  --------
  layer:0,1
  ********
  ********
  ********
  ********
  ********
  ********
  ********
  ********

在如上示例中,方块被切分为 8x8x8:8 层 8x8 的小方块。活塞头填充底部两层(第 0 和 1 层),而活塞柄部分则占据了中心的四分之一和剩下几层(第 2 至 7 层)。

体积模型旋转

除了手动定义额外的体积模型,也可以让现有的体积模型在 Y 轴上旋转 0、90、180 或 270 度形成新的模型。

若要通过旋转定义新模型,只需像正常方块那样定义 block(确保 scale 属性与源模型的匹配),然后接上 rotate。它的设置包含:

  • id - 原本体积模型的方块 ID(被旋转的模型名称)。见“方块 ID 数字”了解指定方块 ID 数字的详情。必填项。
  • data - 原本体积模型的元数据值。必填项,且需要为数字。
  • rot - 旋转度数,仅支持在 Y 轴上旋转。有效值为 0、90、180 或 270 度。必填项。

注意:纹理应用不受体积模型的旋转影响:对旋转前模型北面应用的纹理仍然会应用到旋转后的北面。

贡献者

页面历史