loadNodeShallow method
Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy @param {number} nodeIndex @return {Promise
Implementation
Future<Object3D> loadNodeShallow(int nodeIndex) async {
final json = this.json;
final extensions = this.extensions;
Map<String, dynamic> nodeDef = json["nodes"][nodeIndex];
// reserve node's name before its dependencies, so the root has the intended name.
final nodeName = nodeDef["name"] != null ? createUniqueName(nodeDef["name"]) : '';
final pending = [];
final meshPromise = await _invokeOne((ext) {
return ext?.createNodeMesh != null ? ext!.createNodeMesh(nodeIndex) : null;
});
if (meshPromise != null) {
pending.add(meshPromise);
}
if (nodeDef["camera"] != null) {
final camera = await getDependency('camera', nodeDef["camera"]);
pending.add(await getNodeRef(cameraCache, nodeDef["camera"], camera));
}
List results = await _invokeAll((ext) async {
return ext?.createNodeAttachment != null
? await ext?.createNodeAttachment?.call(nodeIndex)
: null;
});
final objects = [];
//pending.forEach((element) {
for(final element in pending){
objects.add(element);
}
//results.forEach((element) {
for(final element in results){
objects.add(element);
}
late final Object3D node;
// .isBone isn't in glTF spec. See ._markDefs
if (nodeDef["isBone"] == true) {
node = Bone();
}
else if (objects.length > 1) {
node = Group();
}
else if (objects.length == 1) {
node = objects[0];
}
else {
node = Object3D();
}
if (objects.isEmpty || node != objects[0]) {
for (int i = 0; i < objects.length; i++) {
node.add(objects[i]);
}
}
if (nodeDef["name"] != null) {
node.userData["name"] = nodeDef["name"];
node.name = nodeName;
}
assignExtrasToUserData(node, nodeDef);
if (nodeDef["extensions"] != null){
addUnknownExtensionsToUserData(extensions, node, nodeDef);
}
if (nodeDef["matrix"] != null) {
final matrix = Matrix4();
matrix.copyFromUnknown(List<num>.from(nodeDef["matrix"]));
node.applyMatrix4(matrix);
} else {
if (nodeDef["translation"] != null) {
node.position.copyFromUnknown(List<num>.from(nodeDef["translation"]));
}
if (nodeDef["rotation"] != null) {
node.quaternion.fromNumArray(List<num>.from(nodeDef["rotation"]));
}
if (nodeDef["scale"] != null) {
node.scale.copyFromUnknown(List<num>.from(nodeDef["scale"]));
}
}
associations[node] = {"type": 'nodes', "index": nodeIndex};
return node;
}