【问题标题】:The Threejs model sets the position to (0, 0, 0), but the scene display is not (0, 0, 0)Threejs模型设置位置为(0, 0, 0),但场景显示不是(0, 0, 0)
【发布时间】:2020-09-16 19:18:03
【问题描述】:

我今天用 Threejs 开发的时候遇到了模型设置位置的问题

这是我的装载机 Gltf 型号代码 ???? (打字稿)

const loadGltf = (url: string, name: string) => {
    loader.load(url, (gltf) => {

        const object = gltf.scene.children[0]
        object.name = name
        object.position.set(0, 0, 0)

        if (scene) {
            scene.add(object)
            scene.add(new THREE.BoxHelper(object, new THREE.Color(0xffff00)))
        }

    })
}

但是..场景是这样的

The position of sphereMesh is (0, 0, 0)

查了很久文档,没有相关的描述。 我怎么解决这个问题? 如果你明白,你能告诉我吗?这可以帮我一个大忙!?????????

【问题讨论】:

  • 请注意,场景下可能嵌套了很多对象,位置不同。您需要使用scene.traverse((object) => { ... }) 来修改所有这些。您可能会发现在 Blender 中重新定位对象并重新导出更容易,因此您不必在运行时执行此操作。

标签: three.js model position gltf


【解决方案1】:

我认为您正在加载的 gltf 模型的原点设置为远离对象本身。如果这是您创建的模型,请尝试在 Blender 或类似程序中打开它,并确保其原点位于模型本身。

当您在threejs 中调用yourObject.position.set() 时,它将相对于3D 形状的原点,而不是您视觉上看到的物理对象。

【讨论】:

  • 如何测量模型的尺寸?
  • 是的,你是对的。我尝试在模型中添加一个THREE.AxesHelper,发现obejct不在gltf.scene的坐标(0,0,0)。我可以单独复制模型并将其放入我的场景中吗?
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 2019-01-28
  • 2018-08-28
  • 2011-07-20
  • 2022-08-22
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
相关资源
最近更新 更多