我正在编写一个组件,该组件需要访问和修改作为资产读入 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.vertices
和geometry.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(