如何在Three.js中使用GLTFLoader访问加载的网格的单个顶点

3

我使用Three.js中的GLTFLoader来加载glb文件,之前使用的是JSONLoader。访问已加载网格的顶点很容易:

meh.geometry.vertices

然而,当使用GLTFloader加载网格时,我无法找到顶点在哪里?

我需要操纵每个单独的顶点以进行某些粒子动画。

谢谢。


3
你需要查看所加载对象的子项。它们应该是使用THREE.BufferGeometry()THREE.Mesh()创建的,因此它们的顶点将存储在缓冲属性中,例如 object.geometry.attributes.position - prisoner849
感谢您的快速回复。有没有办法将这些“位置”作为向量3来处理?以前,我只需要将向量乘以、加上和减去单个顶点即可。现在似乎我必须先将数组分组为三个一组,然后从这些分离中创建一个vector3,然后进行乘法、加法、减法等运算,然后将值写回到数组中。我很确定我在这里忽略了什么.. 如果问题很愚蠢,请原谅 :) - Paul Hoepner
1
Vector3.fromBufferAttribute 是在使用 BufferAttribute 时非常有用的方法。它会自动从给定的 BufferAttribute 和索引中提取向量组件。一般来说,与 Geometry 相比,使用 BufferGeometry 要稍微困难一些,但它是几何数据更高效的表示方式。使用它是值得的。 - Mugen87
太完美了,这就是解决方案!非常感谢! - Paul Hoepner
1个回答

2

使用console.log(gltf)查看JSON文件,然后您将在场景中找到所有内容。要访问网格,请使用gltf.scene.traverse(function(child){if(child.isMesh){child.geometries.attributes...}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接