我正在使用PolylineCollection()绘制移动点的轨迹。 该应用程序生成大约13,000个点,需要逐个添加到路径中。 我面临的问题是,当点移动时,我需要更新折线中的整个位置数组。 as:
polyline.positions = Cesium.Cartesian3.fromDegreesArrayHeights(updatedBuffer);
必须对添加到路径的每个点执行此操作。
我使用PathGraphics通过提供位置作为TimeIntervalCollection来可视化路径,但是我的应用程序在运行时提供路径中的新点,并且事先不知道位置数据,因为PathGraphics不是可行的选项。 使用路径图形的帧速率也与更新折线位置一样慢。
我通过Chrome Profiler运行我的应用程序,看看为什么帧速率太低了。
基于分析器,最耗时的操作是 更新上述调用中的折线位置和 Scene.render() 在Scene.render()中,调用createVertexArrays()的最长时间 由此我发现,每当有位置更新时,Cesium都会为折线创建一个新的VertexArray。
为了提高性能,我正在考虑每次禁用创建新的顶点阵列,而是创建一个大型阵列。 后续调用更新位置将导致通过调用glBufferSubData()添加位置。
这是一个可行的解决方案,如果是这样,有人可以指出我应该如何做到这一点?