Skip to content

Commit 78ebe59

Browse files
committed
fix(gltf): support recursive processing of nested node hierarchies in GLTF scenes
1 parent 09681cb commit 78ebe59

1 file changed

Lines changed: 27 additions & 6 deletions

File tree

@flywave/flywave-gltf/src/gltf/api/gltf-three.ts

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -522,11 +522,29 @@ function processNodes(
522522

523523
applyTransform(gltfNode, node);
524524

525-
// Add children
526-
if (gltfNode.children) {
527-
for (const childId of gltfNode.children) {
528-
const childNode = dependencies.nodeMap.get(childId.toString());
529-
if (childNode) node.add(childNode);
525+
// Add children recursively
526+
addChildrenRecursively(gltfNode, node, dependencies.nodeMap);
527+
}
528+
}
529+
530+
/**
531+
* 递归添加节点的所有子节点
532+
* @param gltfNode 当前GLTF节点
533+
* @param node 当前Three.js节点对象
534+
* @param nodeMap 节点映射表
535+
*/
536+
function addChildrenRecursively(
537+
gltfNode: GLTFNodePostprocessed,
538+
node: Object3D,
539+
nodeMap: Map<string, Object3D>
540+
): void {
541+
if (gltfNode.children) {
542+
for (const childGltfNode of gltfNode.children) {
543+
const childNode = nodeMap.get(childGltfNode.id);
544+
if (childNode) {
545+
node.add(childNode);
546+
// 递归处理子节点的子节点
547+
addChildrenRecursively(childGltfNode, childNode, nodeMap);
530548
}
531549
}
532550
}
@@ -666,9 +684,12 @@ function setupScene(gltf: GLTFPostprocessed, scene: Scene, nodeMap: Map<string,
666684
scene.userData.extras = defaultScene.extras;
667685
}
668686

687+
// 添加场景中的根节点(子节点已在processNodes中递归添加)
669688
for (const nodeId of defaultScene.nodes || []) {
670689
const node = nodeMap.get(nodeId.id.toString());
671-
if (node) scene.add(node);
690+
if (node) {
691+
scene.add(node);
692+
}
672693
}
673694
}
674695

0 commit comments

Comments
 (0)