Graphics Three.js ParticleSystem闪烁着大量数据

Graphics Three.js ParticleSystem闪烁着大量数据,graphics,graph,3d,three.js,webgl,Graphics,Graph,3d,Three.js,Webgl,背景故事:我正在创建一个基于Three.js的3D图形库。类似于,但为3D。它叫graphosaurus,源头可以找到。我使用Three.js并使用一个粒子表示图形中的单个节点 这是我必须处理的第一个任务:给定任意一组点(每个点都包含X,Y,Z坐标),确定可以查看图形中所有点的最佳相机位置(X,Y,Z) 我的初始解决方案(我们称之为解决方案1)涉及计算所有点的边界球体,然后将球体缩放为围绕点0,0,0的半径为5的球体。由于这些点将保证始终落在该区域内,我可以为相机设置一个静态位置(假设FOV是静

背景故事:我正在创建一个基于Three.js的3D图形库。类似于,但为3D。它叫graphosaurus,源头可以找到。我使用Three.js并使用一个粒子表示图形中的单个节点

这是我必须处理的第一个任务:给定任意一组点(每个点都包含X,Y,Z坐标),确定可以查看图形中所有点的最佳相机位置(X,Y,Z)

我的初始解决方案(我们称之为解决方案1)涉及计算所有点的边界球体,然后将球体缩放为围绕点0,0,0的半径为5的球体。由于这些点将保证始终落在该区域内,我可以为相机设置一个静态位置(假设FOV是静态的),并且数据将始终可见。这很好,但它要么需要更改用户指定的点坐标,要么需要复制所有点,两者都不是很好

我的新解决方案(我们称之为解决方案2)不涉及触摸输入数据的坐标,而只是定位相机以匹配数据。我在这个解决方案中遇到了一个问题。由于某些原因,在处理非常大的数据时,当粒子位于其他粒子的前面/后面时,粒子似乎会闪烁

以下是两种解决方案的示例。确保移动图形以查看效果:

您可以看到代码的差异

如果您对如何消除闪烁有任何见解,请告诉我。谢谢

我注意到在sol#2中,闪烁只在相机移动时发生。一个可能的原因是,当摄影机位置快速变化时,不同的变换会应用于不同的粒子。因此,如果摄影机在时间步长内从
X
移动到
X+DELTAX
,则一组粒子将获得
X
的摄影机变换,而其他粒子将获得
X+DELTAX
的变换


如果将渲染与用户交互分离,则应该可以解决问题,假设这就是问题所在。这意味着您应该通过锁定(不更新)变换矩阵,直到完成渲染循环,将
相同变换应用于所有粒子和连接它们的边

结果是相机的my
near
值太低,
far
值太高,导致“z-fighting”。通过缩小数据集上的这些值,问题就消失了。因为我的数据集依赖于用户,所以我需要确定一种算法来动态生成这些值。

看起来像z-fighting。你需要减少相机的远平面。@Charlotte我试着显著减少远平面,但没有发现任何差异。还有其他想法吗?在摆弄了近/远值之后,我需要增加近值和远值。也许我需要根据输入的数据动态生成这些值。看起来你已经解决了。在不剪裁模型的情况下,近平面和远平面之间的差异应尽可能小,以避免z形格斗。