将 Forge 查看器场景导出到 GLTF
Exporting forge viewer scene to GLTF
我正在尝试将 Forge 查看器上的一些孤立元素转换为 GLTF 我已经包含了这个脚本
<script src="https://unpkg.com/three@0.126.0/examples/js/exporters/GLTFExporter.js"></script>
我正在使用此代码导出到 GLTF
const exporter=new THREE.GLTFExporter()
const exportGLTF = () => {
var scene = viewer.impl.scene
exporter.parse( scene, function ( gltf ) {
const output = JSON.stringify( gltf, null, 2 );
console.log(output)
//saveString( output, 'scene.gltf' );
}, {trs: true} );
}
但不幸的是,我收到这样的空 GLTF 输出
{
"asset": {
"version": "2.0",
"generator": "THREE.GLTFExporter"
},
"scenes": [
{}
],
"scene": 0
}
我不确定是否可以使用 ThreeJS 导出器提取 Forge 场景。
如果您想将 Forge
模型提取为 glTF
格式,最好的方法之一(截至今天)是使用 Forge Convert Utils 包。
R103+ THREE.GLTFExporter() 与三个 R71 不兼容(因为我们使用修改后的 BufferGeometry),因此您没有得到任何几何图形。
Alex 是对的,使用 glTF-convert-utils。
这是一个示例 node.js 脚本,带有 DBID 过滤器。用这个过滤出全图的sub-set:
// convert SVF to dstPath/output.glb (with zeux compression)
// but only convert a subset of objects (see filter on line 23)
// INSTALL:
// > npm install forge-convert-utils forge-server-utils fs-extra gltfpack
// RUN:
// > node convert url guid token dstPath
const path = require('path');
const fs = require('fs-extra');
var gltfpack = require('gltfpack');
const { SvfReader, GltfWriter } = require('forge-convert-utils');
async function convert(urn, guid, token, dstPath) {
// Convert SVF to glTF
const reader = await SvfReader.FromDerivativeService(urn, guid, { token });
const writer = new GltfWriter({
ignoreLineGeometry: true,
ignorePointGeometry: true,
skipUnusedUvs: false,
center: false,
filter: (dbid) => (
[34044, 40936, 41095, 39471, 40933, 40939, 41092, 41097, 41090, 40946].indexOf(dbid)>-1)
});
const svf = await reader.read();
const gltfDir = path.join(path.dirname(dstPath), 'gltf');
fs.ensureDirSync(gltfDir);
await writer.write(svf, gltfDir);
gltfpack.pack(['-cc', '-i', './gltf/output.gltf', '-o', 'output.glb'], { read: fs.readFileSync, write: fs.writeFileSync})
}
const urn = `dXJuOm...j0z`;
const guid = `2588ca45-8487-cddf-b974-7f04179909a2`;
const token = `eyJhbG......gJHNA`
const dstPath = `out`;
convert(urn, guid, token, dstPath);
记得在 urn, guid & token
中填写您的锻造详细信息。该脚本将连接到 forge,下载 svf,转换为 gltf,然后转换为 glb(使用 glTFpack 进行 MeshOpt 压缩)。
我正在尝试将 Forge 查看器上的一些孤立元素转换为 GLTF 我已经包含了这个脚本
<script src="https://unpkg.com/three@0.126.0/examples/js/exporters/GLTFExporter.js"></script>
我正在使用此代码导出到 GLTF
const exporter=new THREE.GLTFExporter()
const exportGLTF = () => {
var scene = viewer.impl.scene
exporter.parse( scene, function ( gltf ) {
const output = JSON.stringify( gltf, null, 2 );
console.log(output)
//saveString( output, 'scene.gltf' );
}, {trs: true} );
}
但不幸的是,我收到这样的空 GLTF 输出
{
"asset": {
"version": "2.0",
"generator": "THREE.GLTFExporter"
},
"scenes": [
{}
],
"scene": 0
}
我不确定是否可以使用 ThreeJS 导出器提取 Forge 场景。
如果您想将 Forge
模型提取为 glTF
格式,最好的方法之一(截至今天)是使用 Forge Convert Utils 包。
R103+ THREE.GLTFExporter() 与三个 R71 不兼容(因为我们使用修改后的 BufferGeometry),因此您没有得到任何几何图形。
Alex 是对的,使用 glTF-convert-utils。
这是一个示例 node.js 脚本,带有 DBID 过滤器。用这个过滤出全图的sub-set:
// convert SVF to dstPath/output.glb (with zeux compression)
// but only convert a subset of objects (see filter on line 23)
// INSTALL:
// > npm install forge-convert-utils forge-server-utils fs-extra gltfpack
// RUN:
// > node convert url guid token dstPath
const path = require('path');
const fs = require('fs-extra');
var gltfpack = require('gltfpack');
const { SvfReader, GltfWriter } = require('forge-convert-utils');
async function convert(urn, guid, token, dstPath) {
// Convert SVF to glTF
const reader = await SvfReader.FromDerivativeService(urn, guid, { token });
const writer = new GltfWriter({
ignoreLineGeometry: true,
ignorePointGeometry: true,
skipUnusedUvs: false,
center: false,
filter: (dbid) => (
[34044, 40936, 41095, 39471, 40933, 40939, 41092, 41097, 41090, 40946].indexOf(dbid)>-1)
});
const svf = await reader.read();
const gltfDir = path.join(path.dirname(dstPath), 'gltf');
fs.ensureDirSync(gltfDir);
await writer.write(svf, gltfDir);
gltfpack.pack(['-cc', '-i', './gltf/output.gltf', '-o', 'output.glb'], { read: fs.readFileSync, write: fs.writeFileSync})
}
const urn = `dXJuOm...j0z`;
const guid = `2588ca45-8487-cddf-b974-7f04179909a2`;
const token = `eyJhbG......gJHNA`
const dstPath = `out`;
convert(urn, guid, token, dstPath);
记得在 urn, guid & token
中填写您的锻造详细信息。该脚本将连接到 forge,下载 svf,转换为 gltf,然后转换为 glb(使用 glTFpack 进行 MeshOpt 压缩)。