【译】glTF教程:变形对象(十八)

【译】glTF教程:变形对象(十八)

2019-02-23

变形对象

上一节的示例包含一个网格,该网格由一个三角形和两个变形目标组成:

{
  "meshes":[
    {
      "primitives":[
        {
          "attributes":{
            "POSITION":1
          },
          "targets":[
            {
              "POSITION":2
            },
            {
              "POSITION":3
            }
          ],
          "indices":0
        }
      ],
      "weights":[
        1.0,
        0.5
      ]
    }
  ],

网格的实际基础几何,即三角形几何,由mesh.primitive 属性,称为"POSITIONS"。变形mesh.primitive 是将属性名"POSITIONS"映射到 accessor对象的字典,这些对象包含每个顶点的’置换’。图像22a以黑色显示初始三角形几何形状,红色显示第一个变形目标的位移,绿色显示第二个变形目标的位移。


图22a:初始三角形和变形目标位移。

网格的 weights决定了如何将这些变形目标位移添加到初始几何形状中,以获得几何形状的当前状态。计算网格 primitive渲染顶点位置的伪代码如下:

renderedPrimitive.POSITION = primitive.POSITION + 
  weights[0] * primitive.targets[0].POSITION +
  weights[1] * primitive.targets[1].POSITION;

:这意味着网格基元的当前状态是通过取初始网格基元几何形状并添加变形目标位移的线性组合来计算的,其中 weights是线性组合的因子。

该资产还包含一个影响变形目标权重的animation。下表为动画权重的关键帧:

Time Weights
0.0 0.0, 0.0
1.0 0.0, 1.0
2.0 1.0, 1.0
3.0 1.0, 0.0
4.0 0.0, 0.0

在整个动画中,权值线性插值,并应用于变形目标位移。在每个点上,网格原语的呈现状态都会相应地更新。下面是一个以1.25秒为计算时间的状态示例。


图22b:变形目标动画的中间状态。