我正在测试Cesiumjs以确定它是否能反映近乎实时的表现 - 例如:飞机的位置。
为此,我需要绘制广告牌并让它们移动 - 我知道这可能是铯,但不确定如何。
代码如下所示:
var billboards = scene.primitives.add(new Cesium.BillboardCollection());
var billboard = {
image : '/path/to/logo.png',
position : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)
};
billboards.add(billboard);
我的问题是如何更改广告牌的位置。我无法找到可以解释的蚂蚁文档。
我以为在做:
billboard.position = ... //new position
但是铯如何知道我已经改变了位置属性,除非它以某种方式将该引用转换为可观察对象。
那么如何更新位置?
感谢。
答案 0 :(得分:4)
Cesium确实会听取对billboard.position
的更改
(source code here),因此应用程序只需编写新位置即可。
请注意,您必须立即写下整个职位,这意味着您可能不写入billboard.position.x
。相反,保持一个“划痕”Cartesian3(不要在60fps的每个动画帧中创建一个new
),写入您的临时变量的x,y,z
属性,然后将您的临时变量分配给{ {1}}。您可以在源代码中看到,已分配的值将被克隆到另一个预先存在的Cartesian3中,因此您可以立即重用该临时变量。
以下是一个例子:
billboard.position
另请注意,您的问题和上述答案都集中在Cesium API的“图形基元”层。 Cesium有一个更高的层,称为“Entity”API,如果您希望Cesium处理具有弹出描述等的用户可选对象的概念,您可以使用它。这里有Sandcastle demo显示如何添加广告牌作为实体的属性,而不是作为基元。这允许您将其他属性添加到同一实体,例如名称,描述,标签,3D模型等,并且可以从相同的位置属性控制它们,并让Cesium处理弹出描述。实体的position属性比基元更复杂,例如它可以是constant或sampled。这允许实体在显示时间轴时随时间改变位置。