如何从 A 帧组件访问缓冲区几何体的属性



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

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

似乎给了我一个数组,但尝试访问元素会给我一个具有空子项和空几何图形的对象。

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

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

向我显示一个数组大小= 1,并填充了Object元素

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

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

这里有

两个.js类你需要了解:Geometry和BufferGeometry。前者已经具有 geometry.verticesgeometry.faces的属性(请参阅那里的文档(。顶点是一个由三个组成的数组。顶点3对象,易于使用。

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

如果您有 BufferGeometry,但更愿意使用几何图形,那么您可以通过以下方式进行转换:

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

A 帧特定的注释,通常您会通过执行el.getObject3D('mesh')来获得对网格的引用。对于可能是嵌套组的自定义模型,在这种情况下:

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

(三.js R84(

最新更新