3

我正在编写一个组件,该组件需要访问和修改作为资产读入 A-Frame 的模型上的位置、法线和 uv 属性。我可以接近访问数据,但不能完全到达那里。使用:

document.querySelector('a-entity').object3D.children

似乎给了我一个数组,但是尝试访问这些元素给了我一个带有空子对象和空几何的对象。

我的猜测是我试图通过错误的门访问数据,而:

console.log(document.querySelector('a-entity').object3D.children);

向我展示了一个数组 size=1 和一个填充的 Object 元素

console.log(document.querySelector('a-entity').object3D.children[0]);

给我带有空地理等的元素。用于获取数据的正确机制或语法是什么?

4

1 回答 1

4

您需要在这里了解两个 three.js 类:GeometryBufferGeometry。前者已经具有geometry.verticesand的属性geometry.faces(参见那里的文档)。Vertices 是一个由 THREE.Vertex3 对象组成的数组,并且易于使用。

如果你有一个 BufferGeometry,那么你有一个不是geometry.attributes.positionTHREE.Vertex3数组,而是包含一个平面的浮点数组,比如[x1, y1, z1, x2, y2, ...]. 这更有效,但更难手动修改。

如果您有 BufferGeometry 但更愿意使用 Geometry,那么您可以转换任何一种方式:

var geometry = Geometry.fromBufferGeometry( mesh.geometry );
mesh.geometry =  BufferGeometry.fromGeometry( geometry );

一个 A-Frame 特定的注释,通常你会通过el.getObject3D('mesh'). 对于可能是嵌套组的自定义模型,在这种情况下:

el.object3D.traverse(function(node) {
  if (node.geometry) { /* ... */ }
});

(三.js r84)

于 2017-04-12T15:29:36.207 回答