ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Threejs新版本后glb导出提示.x问题GLTFExporter,替代3dmax

Threejs新版本后glb导出提示.x问题GLTFExporter,替代3dmax 一般会这么写 Exportconst { GLTFExporter } await import(three/examples/jsm/exporters/GLTFExporter.js);如果你是网上或者AI找的左手倒右手的复制资料都会提示你这个问题但我的问题除了这句几万行代码本来是好的好像是引入.vue改了一点点框架 Threejs 引用了最新版本后就出事了THREE1.63后堆栈定位_processNodeWithPivotAsyncat GLTFWriter._processNodeWithPivotAsync (chunk‑GS642PJL.js:1410:33) at GLTFWriter.processNodeAsync at GLTFWriter.processSceneAsync✅不是 geometry /attributes 的问题是 NodeObject3D 节点层级处理逻辑崩溃新版 three 新增的 pivot 支点逻辑。three.js0.163 引入了pivot支点支持GLTFExporter 新增_processNodeWithPivotAsync分支来处理obj.pivot。 这就是升级版本才出现这个 bug 的直接原因。 报错读取某个对象的.x是读取node.pivot.xpivot 为 undefined。根因在旧版 threeObject3D没有.pivot属 性。 新版本GLTFWriter 会无条件访问node.pivot.x / pivot.y / pivot.z。 但是你代码解析 LOL 模型手动构造 Object3D / Mesh部分对象实例没有初始化 pivot 属性pivot undefined。 老版本代码不会碰 pivot啥事没有新版本走到_processNodeWithPivotAsync直接undefined.x崩溃。注意正常通过new THREE.Object3D()创建的对象会自带 pivot 如果你是对象浅拷贝 / 自定义对象继承 / 手动组装对象树会丢失 pivot 属性pivot undefined。修复方案 A导出前遍历整个树给所有 Object3D 补全 pivot最快在调用exporter.parse()之前执行把树上所有节点补 pivot如果不存在就新建Vector3target.traverse((obj) { // 修复新版GLTFExporter _processNodeWithPivotAsync 读取 pivot.x 崩溃 if (!obj.pivot) { obj.pivot new THREE.Vector3(0, 0, 0); } });只需要这一段再跑导出这个栈的崩溃直接消失。完整测试代码const { GLTFExporter } await import(three/examples/jsm/exporters/GLTFExporter.js); const exporter new GLTFExporter(); console.log(target); target.traverse(async obj{ if(obj.isMesh){ console.log(测试导出单个mesh, obj.name); // try{ // await exportSingleMesh(obj);//不存在de 的方法未测试通过 // console.log(obj.name, ✅ ok); // }catch(e){ // console.error(obj.name, ❌ crash, e.stack); // } // 修复新版GLTFExporter _processNodeWithPivotAsync 读取 pivot.x 崩溃 if (!obj.pivot) { obj.pivot new THREE.Vector3(0, 0, 0); } } }) return new Promise((resolve, reject) { exporter.parse( target, (result) { const blob new Blob([result], { type: model/gltf-binary }); downloadFn(blob, model_uv_modified.glb); console.log(导出完成: model_uv_modified.glb); resolve(blob); }, (error) { console.error(导出失败:, error);//已经会 打印错误堆栈 reject(error); }, { binary: true, //trs: false,//❗ trs: false 务必保证物体矩阵已经 updateMatrixWorld。 trs: true, onlyVisible: true, maxTextureSize: 4096 } ); });参考-3Dmax步骤和资料这并不会从头开始说什么是3Dmax以前说不过搜索引擎现在说不过AI这也并不会从头建模就是网上一抓一大把的收集的LOL模型目录只显示一个View快捷键模型居中快捷键切换WireFrame隐藏对象只显示骨骼只显示一个View快捷键Alt W模型居中快捷键Ctrl Alt Z切换WireFrameF3 or F4但和常用的截图工具 Snipaste 冲突所以一般手动点击左上的 [WireFrame]选择Default Shading隐藏对象只显示骨骼选中右键-》【状态集】 上面的 【隐藏选定对象】隐藏之后找回的方法也是Hirerarchy)快速选择对象节点)* 鼠标移动 到黄色点看提示max动画相关课外阅读【小沐学Unity3d】3ds Max 骨骼动画制作蒙皮修改器skin_3dmax绑定骨骼蒙皮-CSDN博客
返回列表