async exportGltf() {
let exporter = new GLTFExporter();
// 应用变换矩阵到场景中的物体(防止物体位置不在正确位置)
GlobalApi.scene3D.traverse(function (object: any) {
if (object.isMesh) {
object.updateMatrixWorld(); // 更新物体的世界变换矩阵
const matrix = object.matrixWorld.clone(); // 获取物体的世界变换矩阵
object.position.set(0, 0, 0); // 重置物体的位置
object.rotation.set(0, 0, 0); // 重置物体的旋转
object.scale.set(1, 1, 1); // 重置物体的缩放
// 将变换矩阵应用到物体
object.applyMatrix4(matrix);
}
});
let res = new THREE.Group(); //需要导出的组
let objs:any = []; //防止过滤器影响当前场景
GlobalApi.scene3D.children.forEach((item:any) => {
objs.push(item.clone());
});
let resList = objs.filter((ele: any) => {
return (
//根据自身需求,加限制,进行过滤
(ele instanceof (THREE.Group) || ele instanceof (THREE.Mesh))
&&
((((ele as THREE.Mesh).material as any).map != null)) //如果是mesh必须有贴图!!!
);
})
resList && res.add(...resList)
exporter.parse(res, (ele:any) => {
//下载
ele=JSON.stringify(ele);
const objFileData = new Blob([ele], { type: 'text/plain' });
//下载文件
window.open(URL.createObjectURL(objFileData));
const a = document.createElement('a');
a.href = URL.createObjectURL(objFileData);
a.download = 'aa.gltf';
a.click();
}, (err:any) => { console.log(err)});
return;
}