使用 gltf-part 在 Aframe 中导入的场景将对象原点重置为 0,0,0
Imported scene in Aframe with gltf-part resets object origins to 0,0,0
问题:与 gltf-part 一起使用的对象的起点是 0,0,0
codesandbox 示例:https://codesandbox.io/s/xenodochial-moore-4383f?file=/index.html
shows a log with the correct positions when displayed as a scene and one where I use gltf-part to show the cubes where all positions of the cubes are at 0,0,0
导出的场景来自blender,其中我将原点设置为每个立方体的中心,见右上立方体。
在Aframe中导入gltf文件后,用gltf-part显示立方体,每个立方体的原点都是0,0,0。
GLTF 是正确的,当我在搅拌机中再次导入它时,原点仍然在立方体的中心。
如果 Aframe 中每个立方体都位于位置 0,0,0,我如何获得正确的坐标?
这对我有用:
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。
以下是如何更改此行为以满足您的需要的粗略概述:
- 您需要将
gltf-part
组件编辑到 "reset" 它在加载时提取的 "part" 的位置。在此行中克隆网格后:
mesh = part.getObjectByProperty('type', 'Mesh').clone(true);
那么您需要将该网格的位置复制到一个变量,然后在本地重置网格:
mesh.position.set ( 0, 0, 0 );
- 然后您需要将 A-Frame 实体设置到您刚刚保存在变量中的位置。
这里是修改了组件的示例代码:https://codesandbox.io/s/gltf-part-reset-qgovf 注意重命名的组件 gltf-part-reset
和新属性 resetPosition
。默认值为 false
以保留现有的 gltf-part
行为,在此示例中设置为 true
以表现出所需的行为。
问题:与 gltf-part 一起使用的对象的起点是 0,0,0
codesandbox 示例:https://codesandbox.io/s/xenodochial-moore-4383f?file=/index.html
shows a log with the correct positions when displayed as a scene and one where I use gltf-part to show the cubes where all positions of the cubes are at 0,0,0
导出的场景来自blender,其中我将原点设置为每个立方体的中心,见右上立方体。
在Aframe中导入gltf文件后,用gltf-part显示立方体,每个立方体的原点都是0,0,0。
GLTF 是正确的,当我在搅拌机中再次导入它时,原点仍然在立方体的中心。
如果 Aframe 中每个立方体都位于位置 0,0,0,我如何获得正确的坐标?
这对我有用:
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。
以下是如何更改此行为以满足您的需要的粗略概述:
- 您需要将
gltf-part
组件编辑到 "reset" 它在加载时提取的 "part" 的位置。在此行中克隆网格后:mesh = part.getObjectByProperty('type', 'Mesh').clone(true);
那么您需要将该网格的位置复制到一个变量,然后在本地重置网格:mesh.position.set ( 0, 0, 0 );
- 然后您需要将 A-Frame 实体设置到您刚刚保存在变量中的位置。
这里是修改了组件的示例代码:https://codesandbox.io/s/gltf-part-reset-qgovf 注意重命名的组件 gltf-part-reset
和新属性 resetPosition
。默认值为 false
以保留现有的 gltf-part
行为,在此示例中设置为 true
以表现出所需的行为。