Three.js PointCloud 顶点总是 return (0,0,0) 位置

Three.js PointCloud vertices always return (0,0,0) position

我有一个名为 "cloud" 的 PointCloud,它以 (0,0,0) 为中心,有大约 1000 个顶点。使用顶点着色器更新顶点的位置。我现在想从渲染循环每隔几秒将每个顶点的位置打印到控制台。

如果我使用

检查点云的顶点
console.log(cloud.geometry.vertices[100])

在渲染循环中,我总是得到一个全为零的顶点,我可以从所有旋转的粒子中看出这不是真的。

我看了这个类似的 post:How to get the absolute position of a vertex in three.js? 并尝试了

var vector = cloud.geometry.vertices[100].clone();
vector.applyMatrix4( cloud.matrixWorld );

这仍然给了我一个全零向量(对于所有顶点)。使用 scene.matrixWorld 代替 cloud.matrixWorld 也不起作用。

我也尝试过使用 cloud.updateMatrixWorld()scene.updateMatrixWorld()。最后,我尝试设置 cloud.geometry.vertexNeedsUpdate = true.

到目前为止,我看到的所有建议都使用了上述建议,但其中 none 对我有用。我有一种感觉,就是数组没有更新为正确的值,但我不知道为什么会这样。有什么想法吗?

那是因为顶点永远不会在 cpu 上改变它们的属性,而只会在 gpu(顶点着色器)上改变。 这是一张单程票,通信是 cpu -> gpu 而不是相反。

如果您需要使用顶点位置,那么您必须在 cpu 上进行计算,并在每次有变化时将顶点批发送回 gpu。