我有一个名为" cloud"的PointCloud。以(0,0,0)为中心,有大约1000个顶点。顶点'使用顶点着色器更新位置。我现在想要每隔几秒钟从渲染循环中将每个顶点的位置打印到控制台。
如果我使用
检查点云的顶点console.log(cloud.geometry.vertices[100])
在渲染循环中,我总是得到一个全零的顶点,我可以从所有的粒子中看到,这是不正确的。
我查看了这篇类似的帖子: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
。
到目前为止,我所见过的所有建议都使用了上述内容,但这些建议都不适用于我。我有一种感觉,阵列只是没有使用正确的值进行更新,但我不知道为什么会这样。有什么想法吗?
答案 0 :(得分:0)
这是因为顶点永远不会改变它们在cpu上的属性,而只是在gpu(顶点着色器)上。 这是一张单程票,通讯是cpu - > gpu不是相反的。
如果你需要处理顶点位置,那么你必须在cpu上进行计算,并在每次更改回到gpu时发送顶点批处理。