CesiumJS - 与性能相关的实体/图形层次结构

CesiumJS - Entity / Graphics Hierarchie in relation to performance

我正在为 CesiumJS 内容开发一个所见即所得的编辑器。 用户将能够创建许多点、线和其他图形,根据可定义的关系将它们连接起来,并将它们分组到不同的组中。

现在我想知道在性能方面的最佳做法是什么。 目前我为每个组创建一个 PointPrimitiveCollection 然后加分:

group.points = scene.primitives.add(new Cesium.PointPrimitiveCollection());

然后

group.points.add({
   position : cartesian,
   ...
});

每个新点。

使用以下方法创建多边形:

network.hull_polygon = viewer.entities.add({
        name : 'xxx',
        polygon : {
            hierarchy : Cesium.Cartesian3.fromDegreesArray(points_array),
            material : color,
            ...
        }
    });

折线类似。

既然对象也可以被拖来拖去/动画化,我想知道 Cesiums 实体逻辑从哪里来?

感谢大家的帮助!

Cesium 的实体逻辑主要用于随时间沿已知路径移动的对象,例如未来飞机的飞行计划,或过去车辆所走路线的 GPS 记录。这样的路线可以加载到Entity系统中(通常是通过CZML),用户可以运行以任意速度向前和向后模拟时间,查看所有车辆的路线。实体系统拥有根据模拟时间变化更新图元位置的逻辑。

实体也经常被用作使一些不同的图形基元相互关联的快速方法。例如,多边形、点和标签都可以创建为单个 Entity,即使它们是位于同一位置的三个独立图形基元。这为应用程序开发人员节省了一些精力,并且不会对性能造成太大影响,因为所涉及的属性都被标记为常量,因此实体层知道不要用模拟时间更新它们。

但是,听起来您可能遇到了事先不知道路径的情况。对于诸如用户交互式编辑或接收到的实时遥测之类的事情,实体系统无法知道接下来会发生什么,因此它的整个从模拟时间更新位置的系统对你没有任何好处。在这种情况下,最好跳过实体,并为此专门处理图形基元。这意味着您需要编写自己的更新函数来在接收到新信息时更改图形位置,类似于实体层的更新函数,但基于您自己的实时输入而不是记录的路径。

请注意,public "Sandcastle" 演示仅包括实体演示。但是,如果您从开发版本下载并在本地构建 Cesium 和 运行 Sandcastle 的源代码,Sandcastle Gallery 中会出现一个名为 Development 的单独选项卡,它显示了基于图形基元的一整套演示反对实体。这对于查看如何在这一层控制事物的示例很有用。

希望这有助于理解 Cesium 的不同层如何相互作用。