markDefs method

void markDefs()

Marks the special nodes/meshes in json for efficient parse.

Implementation

void markDefs() {
  final nodeDefs = json["nodes"] ?? [];
  final skinDefs = json["skins"] ?? [];
  final meshDefs = json["meshes"] ?? [];

  // Nothing in the node definition indicates whether it is a Bone or an
  // Object3D. Use the skins' joint references to mark bones.
  for (int skinIndex = 0, skinLength = skinDefs.length;
      skinIndex < skinLength;
      skinIndex++) {
    final joints = skinDefs[skinIndex]["joints"];

    for (int i = 0, il = joints.length; i < il; i++) {
      nodeDefs[joints[i]]["isBone"] = true;
    }
  }

  // Iterate over all nodes, marking references to shared resources,
  // as well as skeleton joints.
  for (int nodeIndex = 0, nodeLength = nodeDefs.length;
      nodeIndex < nodeLength;
      nodeIndex++) {
    Map<String, dynamic> nodeDef = nodeDefs[nodeIndex];

    if (nodeDef["mesh"] != null) {
      addNodeRef(meshCache, nodeDef["mesh"]);

      // Nothing in the mesh definition indicates whether it is
      // a SkinnedMesh or Mesh. Use the node's mesh reference
      // to mark SkinnedMesh if node has skin.
      if (nodeDef["skin"] != null) {
        meshDefs[nodeDef["mesh"]]["isSkinnedMesh"] = true;
      }
    }

    if (nodeDef["camera"] != null) {
      addNodeRef(cameraCache, nodeDef["camera"]);
    }
  }
}