作者:962326154_5af7cb | 来源:互联网 | 2022-12-10 13:41
我需要为跟踪实体获得前视图,该视图将根据实体移动而变化.
当我为viewer.trackedEntity
属性赋值时,相机会占据一定的位置.是否可以更改此位置以使摄像机直接位于跟踪实体的前方?
我怎么能为这个例子做这个?
var viewer = new Cesium.Viewer('cesiumContainer', {
infoBox: false,
selectionIndicator: false,
shouldAnimate: true,
terrainProvider: Cesium.createWorldTerrain()
});
var start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16));
var stop = Cesium.JulianDate.addSeconds(start, 360, new Cesium.JulianDate());
viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
viewer.clock.multiplier = 10;
viewer.timeline.zoomTo(start, stop);
var position = new Cesium.SampledPositionProperty();
position.addSample(start, Cesium.Cartesian3.fromDegrees(-118.243683, 34.052235, 500000));
position.addSample(Cesium.JulianDate.addSeconds(start, 250, new Cesium.JulianDate()), Cesium.Cartesian3.fromDegrees(-110, 35.5, 500000));
position.addSample(Cesium.JulianDate.addSeconds(start, 500, new Cesium.JulianDate()), Cesium.Cartesian3.fromDegrees(-86.134903, 40.267193, 500000));
var entity = viewer.entities.add({
availability : new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
start : start,
stop : stop
})]),
position : position,
orientation : new Cesium.VelocityOrientationProperty(position),
model : {
uri : 'https://cesiumjs.org/Cesium/Apps/SampleData/models/CesiumAir/Cesium_Air.gltf',
minimumPixelSize : 64
},
path : {
resolution : 1,
material : new Cesium.PolylineGlowMaterialProperty({
glowPower : 0.1,
color : Cesium.Color.YELLOW
}),
width : 10
}
});
viewer.trackedEntity = entity;
Loading...
1> SirPeople..:
将实体添加到Cesium.Viewer时,实体中有一个属性viewFrom
,所以通过执行以下操作:
var entity = viewer.entities.add({
availability : new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
start : start,
stop : stop
})]),
position : position,
orientation : new Cesium.VelocityOrientationProperty(position),
model : {
uri :
'https://cesiumjs.org/Cesium/Apps/SampleData/models/CesiumAir/Cesium_Air.gltf',
minimumPixelSize : 64
},
path : {
resolution : 1,
material : new Cesium.PolylineGlowMaterialProperty({
glowPower : 0.1,
color : Cesium.Color.YELLOW
}),
width : 10
},
viewFrom: new Cesium.Cartesian3(30, 0, 0),
});
您可以获得所需的效果,观察viewFrom是Cartesian3对象,因此如果您想要一个YZ可见的正面视图,您应该只在X轴上设置距离.
免责声明:正如评论中所指出的,这是一个East-North-Up所以XYZ取决于车辆本身的方向.
必须承认,这方面的文档很差,甚至有关于这种行为的错误.
但经过他们论坛的长时间讨论,你可以发现它是如何运作的
据我所知,这个答案是正确的。但是,`viewFrom`是在East-North-Up帧中定义的,因此此处要提供的正确向量取决于车辆的方向。Cesium相机不会在其主体框架中跟随实体,因此不会随实体旋转。从理论上讲,可以派生“ EntityView”类,并创建一个使用实体方向的修改版本,但是这可能会变成一个大型项目,超出了SO答案的范围。