@@ -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