Javascript 铯移动广告牌
我正在测试Cesiumjs,看看它是否能反映一个近乎实时的经验——例如:飞机的位置 为此,我需要画广告牌,让它们移动——我知道铯是可能的,只是不知道如何移动 代码如下所示:Javascript 铯移动广告牌,javascript,cesium,Javascript,Cesium,我正在测试Cesiumjs,看看它是否能反映一个近乎实时的经验——例如:飞机的位置 为此,我需要画广告牌,让它们移动——我知道铯是可能的,只是不知道如何移动 代码如下所示: var billboards = scene.primitives.add(new Cesium.BillboardCollection()); var billboard = { image : '/path/to/logo.png', position : Cesium.Cartesian3.fromDe
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);
我的问题是如何改变广告牌的位置。我找不到可以解释的ant文档
我想做:
billboard.position = ... //new position
但是铯怎么知道我已经改变了位置属性,除非它以某种方式把那个参考变成了一个可观察的物体
那么如何更新位置呢
谢谢。铯确实在监听广告牌的变化。位置 (),因此,对于应用程序来说,简单地写一个新位置是正确的行为 请注意,您必须一次写入整个position,这意味着您不能写入
billboard.position.x
。相反,保留一个“scratch”Cartesian3(不要以60fps的速度创建一个新的动画帧),写入scratch变量的x、y、z
属性,然后将scratch变量指定给billboard.position
。您可以在源代码中看到,分配的值将被克隆到另一个预先存在的Cartesian3中,因此您可以立即重用scratch变量
下面是一个例子:
// Just once at app startup. Don't call "new" at 60fps.
var scratchCartesian3 = new Cesium.Cartesian3();
var ellipsoid = viewer.scene.mapProjection.ellipsoid;
function onTick() {
// This is safe to call at 60fps.
billboard.position = Cesium.Cartesian3.fromDegrees(
lon, lat, alt, ellipsoid, scratchCartesian3);
}
另外请注意,您的问题和上面的答案都集中在铯API的“图形原语”层上。Cesium有一个更高的层,称为“”API,如果您希望Cesium处理用户可选择对象的概念以及弹出式描述等,则可以使用该层。下面展示了如何将公告牌添加为实体的属性,而不是原语。这允许您向同一实体添加其他属性,例如名称、描述、标签、三维模型等,并使它们都从同一位置属性进行控制,并使Cesium处理弹出式描述。实体的“位置”属性比基本体更复杂,例如,它可以是或。这允许实体在显示时间轴时随时间改变位置。只有铯小部件系统使用敲除,它不在原语或实体API中的任何地方使用。设置公告牌位置会导致设置脏标志,这是铯知道如何更新它的。感谢澄清,我编辑了答案中的措辞。