彩色PointCloud渲染JavaScript算法

时间:2015-12-20 09:26:20

标签: javascript algorithm 3d pseudocode point-clouds

我刚刚在JS中制作了一个3D pointcloud 渲染应用。这个应用程序能够以40 FPS渲染+200 000 3D黑/白点,用于密集的重云。但是,我现在正在尝试实现颜色,当我正在研究这个新功能时,我意识到在屏幕上绘制点的顺序非常重要。

我创建了另一个文件,我为每个点选择了一种颜色。例如,点0为红色,点1为绿色,点2为蓝色;所以颜色是预先计算的。

我的意思是,来自用户的更远的点应该首先呈现,更接近的点应该稍后呈现。使用此技术,如果两个点重叠,则更接近的点将出现在屏幕上。

我制作了一个自定义算法[O(n ^ 2),我知道很慢),它根据用户位置的距离(超过第一个点)对所有点(超过200 000)进行了排序。但是,我花了大约7秒的时间将它们按正确的顺序排列,并且应用程序本来是实时的,我必须制定一个解决方法,以防止浏览器显示“此页面没有响应”弹出窗口

  

是否还有其他方法可以渲染在屏幕上重叠的3D彩色点?别担心,我不是要求一段代码,我只是想知道是否有另一种更快的方法来实现这一点,如果可能的话,在伪代码中。

我已经知道我可以减少编写更有效算法的时间,但这仍然太慢。每个有效的答案都会得到一个upvote奖励!

这就是我所做的事情

enter image description here

这就是我想要的

enter image description here

2 个答案:

答案 0 :(得分:1)

目前尚不清楚为什么要提出O(n^2)时间复杂度。

你有200k点阵。你有一点需要计算距离。这是在O(n)中完成的。在我的机器上,它在42.142ms完成。

现在你必须根据这个距离对你的点进行排序,并在我的机器上按122.358ms完成。您的排序算法在O(n*log(n))中运行。现在你绘制从最远到关闭的点数,它也在O(n)中运行。

所以我不确定你是如何结束O(n^2)以及为什么它会在7秒内运行。

答案 1 :(得分:1)

您可以在渲染过程中记住渲染的位置/距离,而不是排序。如果您发现要渲染的新点远远超过已渲染的重叠点,则跳过新点。