You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不依赖three.js在服务端编辑glTF模型并调整合并资产位置

回答你的两个问题:

1. 不用three.js也能在服务端编辑glTF的位置/缩放属性

绝对可以!glTF本质上是基于JSON的结构化格式(即使是二进制的GLB,也能解析为可操作的JSON+二进制块),完全不需要依赖three.js这类渲染库。你只需要直接操作glTF的JSON数据,找到对应的节点(node)修改translation、scale或者rotation属性就行——这些属性都是glTF标准规范定义的,逻辑非常直观。

2. 用Sayduck glTF Pipeline实现模型并排合并

针对你要把猫((0,0,0))和狗((10,0,0))并排对比的需求,结合Sayduck的gltf-pipeline,你可以在Node.js中全程不依赖three.js实现,步骤如下:

核心思路

在合并两个模型之前,先修改其中一个模型的根节点translation属性,再将两个模型合并到同一个glTF文件中。

具体代码示例

先安装所需依赖:

npm install @sayduck/gltf-pipeline fs-extra

然后编写Node.js脚本:

const fs = require('fs-extra');
const { mergeGltfBuffers, mergeGltfJson, glbToGltf, gltfToGlb } = require('@sayduck/gltf-pipeline');

async function mergeModelsWithPosition() {
  // 处理GLB格式的模型(如果是gltf可跳过这一步)
  const catGlb = await fs.readFile('./cat.glb');
  const catGltf = await glbToGltf(catGlb);
  
  const dogGlb = await fs.readFile('./dog.glb');
  const dogGltf = await glbToGltf(dogGlb);

  // 修改狗模型的所有根节点位置(根节点的parent属性为null/undefined)
  dogGltf.json.nodes.forEach(node => {
    if (node.parent === undefined || node.parent === null) {
      // 直接设置位置为(10, 0, 0),覆盖原有值或新增属性
      node.translation = [10, 0, 0];
    }
  });

  // 合并两个模型的JSON结构和二进制缓冲区
  const mergedJson = mergeGltfJson([catGltf.json, dogGltf.json]);
  const mergedBuffers = await mergeGltfBuffers(
    [catGltf.json, dogGltf.json],
    ['./cat.glb', './dog.glb']
  );

  // 将合并结果转为GLB并输出(也可以输出为gltf格式)
  const mergedGlb = await gltfToGlb({ json: mergedJson, buffers: mergedBuffers });
  await fs.writeFile('./merged.glb', mergedGlb);

  console.log('模型合并完成!');
}

mergeModelsWithPosition().catch(err => console.error(err));

注意事项

  • 如果你的模型是纯gltf格式(带.bin文件),可以直接读取json文件处理,无需GLB转换步骤。
  • 若模型存在多个根节点(比如复杂模型拆分的独立部件),代码会统一偏移所有根节点,确保整个模型整体移动。
  • 如果模型包含动画,修改静态translation不会影响动画关键帧——如果你的需求只是静态并排展示,完全不需要调整动画数据。

内容的提问来源于stack exchange,提问作者RamBa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:32:14