带gltf部分的Aframe中导入的场景将对象原点重置为0,0,0

问题描述 投票:2回答:2

问题:与gltf-part一起使用的对象的原点为0,0,0

codesandbox示例:https://codesandbox.io/s/xenodochial-moore-4383f?file=/index.html

[显示为场景时显示具有正确位置的日志,并且我使用gltf-part来显示其中所有立方体位置均为0,0,0的立方体

导出的场景来自混合器,在其中将原点设置为每个多维数据集的中心,请参见右上角的多维数据集。

[在Aframe中导入gltf文件并显示带有gltf-part的多维数据集之后,每个多维数据集的原点都为0,0,0。

GLTF是正确的,当我在搅拌机中再次导入它时,原点仍然在立方体的中心。

Blender file origin of top right cube is in center, even after export to gltf and imported againAframes inspector shows origin of all cubes and selected top right cube is 0,0,0

如果它们都在0,0,0位置,如何获得Aframe中每个立方体的正确坐标?

blender aframe gltf
2个回答
1
投票

这对我有用:

  window.addEventListener("model-loaded", (e) => {
    const sceneObj = document.querySelector("a-scene").object3D;
    let object;
    object = sceneObj.getObjectByProperty("name", "cube1");
    console.log(object.position);
    object = sceneObj.getObjectByProperty("name", "cube2");
    console.log(object.position);
  });

0
投票

该组件的行为符合预期,已选择了这些部件,但您仍将它们作为子级加载到场景中,因此它们的相对位置对于父元素保持在0,0,0。

这里是如何更改此行为以满足您的需要的粗略概述:

  • 您将需要编辑gltf-part组件,以“重置”加载时提取的“零件”的位置。在此行中克隆网格之后:mesh = part.getObjectByProperty('type', 'Mesh').clone(true);那么您需要将该网格的位置复制到一个变量,然后在本地重新设置网格:mesh.position.set ( 0, 0, 0 );
  • 然后,您需要将A-Frame实体设置为刚刚保存在变量中的位置。
© www.soinside.com 2019 - 2024. All rights reserved.