THREE.GLTFExporter 是 Three.js 提供的一个工具类,用于将场景或模型导出为 GLTF 或 GLB 格式。GLTF(GL Transmission Format)是一种高效的 3D 文件格式,广泛用于 Web、游戏和增强现实等领域。以下是关于 GLTFExporter 的详细介绍和使用方法。
结论
THREE.GLTFExporter 可以将 Three.js 场景或模型导出为 GLTF/GLB 文件,支持多种配置选项,适用于需要保存或分享修改后的 3D 模型的场景。
详细展开
1. 功能概述
GLTFExporter 的主要功能包括:
- 导出 Three.js 场景或模型为 GLTF/GLB 文件。
- 支持二进制格式(GLB)和文本格式(GLTF)。
- 提供灵活的导出选项,如是否包含不可见对象、是否嵌入纹理等。
2. 使用步骤
(1) 引入 GLTFExporter
确保你已经引入了 GLTFExporter 模块:
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';
(2) 创建 GLTFExporter 实例
创建一个 GLTFExporter 实例,并调用其 parse 方法来导出模型或场景。
const exporter = new GLTFExporter();
(3) 配置导出选项
GLTFExporter 提供了一些可选参数,用于控制导出行为:
| 参数名 | 类型 | 描述 |
|---|---|---|
trs |
Boolean | 是否保留对象的平移、旋转和缩放信息(默认值为 true)。 |
onlyVisible |
Boolean | 是否只导出可见的对象(默认值为 false)。 |
truncateDrawRange |
Boolean | 是否截断绘制范围(默认值为 false)。 |
binary |
Boolean | 是否导出为二进制格式(GLB,true)或文本格式(GLTF,false),默认值为 false。 |
(4) 调用 parse 方法
parse 方法是核心功能,用于执行导出操作。它接受以下参数:
- 要导出的对象:可以是一个
Object3D或整个场景(Scene)。 - 回调函数:用于处理导出结果。
- 导出选项:可选参数,用于配置导出行为。
exporter.parse(
object, // 要导出的对象(场景或模型)
function (result) {
if (result instanceof ArrayBuffer) {
saveArrayBuffer(result, 'model.glb'); // 保存为 GLB 文件
} else {
const output = JSON.stringify(result, null, 2);
saveString(output, 'model.gltf'); // 保存为 GLTF 文件
}
},
options // 配置选项
);
3. 完整示例代码
以下是一个完整的示例,展示如何使用 GLTFExporter 导出模型:
import * as THREE from 'three';
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';
// 创建场景、相机和渲染器
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer);
// 添加一个简单的立方体
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// 设置相机位置
camera.position.z = 5;
// 导出模型
function exportModel() {
const exporter = new GLTFExporter();
const options = {
trs: true, // 保留平移、旋转、缩放信息
onlyVisible: true, // 只导出可见对象
truncateDrawRange: true, // 截断绘制范围
binary: true // 导出为二进制格式(GLB)
};
exporter.parse(
scene, // 导出整个场景
function (result) {
if (result instanceof ArrayBuffer) {
saveArrayBuffer(result, 'exported_model.glb'); // 保存为 GLB 文件
} else {
const output = JSON.stringify(result, null, 2);
saveString(output, 'exported_model.gltf'); // 保存为 GLTF 文件
}
},
options
);
}
// 保存二进制文件
function saveArrayBuffer(buffer, filename) {
const blob = new Blob([buffer], { type: 'application/octet-stream' });
saveAs(blob, filename); // 使用 FileSaver.js
}
// 保存文本文件
function saveString(text, filename) {
const blob = new Blob([text], { type: 'text/plain' });
saveAs(blob, filename); // 使用 FileSaver.js
}
// 调用导出函数
exportModel();
注意:
saveAs是FileSaver.js提供的功能,因此需要先引入FileSaver.js:<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
4. 关键点解析
(1) 导出格式
- 如果
options.binary设置为true,则导出为二进制格式(GLB)。 - 如果设置为
false,则导出为文本格式(GLTF)。
(2) 纹理嵌入
如果模型中使用了纹理贴图,GLTFExporter 会自动嵌入这些纹理到导出的文件中。但需要注意,外部链接的纹理可能无法正确嵌入,建议使用本地加载的纹理文件。
(3) 性能优化
对于复杂的场景或大型模型,导出过程可能会比较耗时。可以通过简化场景或减少材质数量来提高性能。
5. 注意事项
(1) 依赖管理
确保正确引入 GLTFExporter 和 FileSaver.js,否则可能导致导出失败。
(2) 浏览器兼容性
GLTFExporter 主要在现代浏览器中运行良好。如果需要在老旧浏览器中使用,可能需要额外的 polyfill。
(3) 其他格式
如果需要导出为其他格式(如 FBX 或 OBJ),Three.js 本身并不支持,可以考虑使用第三方工具(如 Blender)进行转换。
总结
THREE.GLTFExporter 是一个强大且易用的工具,可以帮助开发者将 Three.js 场景或模型导出为 GLTF/GLB 文件。通过灵活的配置选项,可以满足不同的导出需求。结合 FileSaver.js,还可以直接在浏览器中保存文件,非常适合需要保存或分享修改后模型的场景。

浙公网安备 33010602011771号