webgl3.0动目标加载波束雷达
2023-05-30 11:47:14
96次阅读
0个评论
最后修改时间:2023-06-16 09:17:58
波束雷达视频效果
1、加载cesium 默认环境及开启帧数
var viewer = new Cesium.Viewer("cesiumContainer", {
animation: false,
baseLayerPicker: false,
fullscreenButton: false,
geocoder: false,
homeButton: false,
infoBox: false,
sceneModePicker: false,
selectionIndicator: false,
timeline: false,
navigationHelpButton: false,
scene3DOnly:true,
imageryProvider: new Cesium.SingleTileImageryProvider({
url: "../images/globe.jpg"
})
});
viewer.extend(CesiumEMExtensions.EMExtensionsMixin);
viewer.scene.debugShowFramesPerSecond = true;
2、生成场景需要定义的对象
var ev_mtMgr; //动目标对象
var planeNumber = 1; //飞行物数量
var itemIndex = 0; //动目标的uid
var customCylider=undefined; //波束雷大对象
let count =0; //波束雷达生成条件
setUpMovingTarget(planeNumber); //生成动目标的方法
3、生成动目标对象
function setUpMovingTarget (planeNumber) {
viewer.scene.postProcessStages.fxaa.enabled = true;
var sTime = new Date().getTime();
var eTime = new Date(sTime + 1000000).getTime();
var timeSpace = eTime - sTime;
var trainingClock = new Cesium.Clock({
startTime: Cesium.JulianDate.fromDate(new Date(sTime)),
currentTime: Cesium.JulianDate.fromDate(new Date(sTime)),
stopTime: Cesium.JulianDate.fromDate(new Date(eTime)),
clockStep: Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER,
clockRange: Cesium.ClockRange.UNBOUNDED,
});
function DateManager () {
}
DateManager.prototype.addReceiveDataListener = function() {
}
var ev_dataMgr = new DateManager();
ev_mtMgr = new CesiumEMExtensions.EV_MovingTargetManager({
viewer: viewer,
ev_dataMgr: ev_dataMgr,
trainingClock: trainingClock,
});
var ev_mtLabelConfiTable = new CesiumEMExtensions.EV_MTLabelConfigurationTable({
showBackground: true,
font: "12px sans-serif",
//distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.00001, 400000.0),
});
ev_mtLabelConfiTable.addDisplayFieldPara("id:", "uId");
ev_mtLabelConfiTable.addDisplayFieldPara("经度:", "fLon", 2);
ev_mtLabelConfiTable.addDisplayFieldPara("纬度:", "fLat", 2);
ev_mtLabelConfiTable.addDisplayFieldPara("海拔:", "fAlt", 2);
ev_mtLabelConfiTable.addDisplayFieldPara("机型:", "modelType");
ev_mtMgr.ev_MTLabelConfigurationTables.set(1, ev_mtLabelConfiTable);
trainingClock.shouldAnimate = true;
trainingClock.tick();
var single = [];
var lat = 18;
var height = 90000;
var endLat = 37;
var latNum = 40;//一条纬线上动目标的数量
var i, j, itemStartLat, itemEndLat, itemStartLon, itemEndLon;
var lon = 97;
var endLon = 97;
while (itemIndex < planeNumber) {
i = Math.floor(itemIndex / latNum);
j = itemIndex % latNum;
itemStartLat = lat + i * 0.5;
itemEndLat = endLat + 0.5;
itemStartLon = lon + j * 0.5;
itemEndtLon = endLon + j * 0.5;
var tempMTFlightData = new CesiumEMExtensions.EV_MovingTargetFlightData({
uId: itemIndex,
mtType: 1,
name: "J10",
modelType: 10,
modelLabelVisible: false,
modelUri: Cesium.buildModuleUrl("Assets/EMExtensions/gltf/dsp卫星.gltf"),
modelIconUri: "../images/Flight_1.png",
modelIconDisplayDistance: new Cesium.DistanceDisplayCondition(5000000.0, 50000000.0),
modelIconScale: 0.3,
scale: 100,
specialAttributes: {},
ribbonVisible: false,
forwardOffset: -10,
upOffset: 3,
traceTimeDuration: 30,
barTimeInterval: 20
});
tempMTFlightData.addTimeAttitude({
realTime: sTime,
fLon: itemStartLon,
fLat: itemStartLat,
fAlt: height,
position: Cesium.Cartesian3.fromDegrees(itemStartLon, itemStartLat, height),
nRedOrBlue: 0,
headingPitchRoll: new Cesium.HeadingPitchRoll(0.0, 0.0, 0.0)
});
tempMTFlightData.addTimeAttitude({
realTime: eTime,
fLon: itemEndtLon,
fLat: itemEndLat,
fAlt: height,
position: Cesium.Cartesian3.fromDegrees(itemEndtLon, itemEndLat, height),
nRedOrBlue: 0,
headingPitchRoll: new Cesium.HeadingPitchRoll(0.0, 90, 0.0)
});
ev_mtMgr.addMovingTargetTimeAttitude(itemIndex, tempMTFlightData);
itemIndex++;
}
}
4、销毁动目标对象
function destroy () {
if (ev_mtMgr) {
ev_mtMgr.removeAllMovingTargets();
ev_mtMgr.destroy();
ev_mtMgr = undefined;
}
}
5、根据点位,方向和距离计算下一个点的位置
function ByDirectionAndLen(position, angle, len){
let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position); //将坐标转换为东北天坐标
let mz = Cesium.Matrix3.fromRotationX(angle.pitch + Math.PI/2 || 0); //计算3*3旋转矩阵
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz); //转为4*4xuanzhuanjuzhen Cesium.Matrix4.multiply(matrix, rotationZ, matrix);
let result = Cesium.Matrix4.multiplyByPoint(matrix, new Cesium.Cartesian3(0, len, 0),
new Cesium.Cartesian3());
return result;
}
6、帧监听绘制波束雷达
let preRender = viewer.scene.preRender.addEventListener(() => {
if(ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude!=undefined){
if(count==0){
//根据两点计算向量
var direction = Cesium.Cartesian3.subtract(
Cesium.Cartesian3.fromDegrees(121.20, 23.0, 10000),
Cesium.Cartesian3.fromDegrees(121.20, 23.0, 50000),
new Cesium.Cartesian3()
);
//根据属性绘制波束雷达
customCylider= new CesiumEMExtensions.EV_CustomCylider({
viewer: viewer,
startPosition: ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,
direction: direction,
length: 100000,
fillColor: new Cesium.Color(0.0, 1.0, 1.0, 1.0),
fillStyle: CesiumEMExtensions.EV_CustomCylider.fillType.stripe,
speed: 1.0,
multiply: 10,
show: true,
bottomRadius: 20000,
topRadius: 0,
});
}else{
//根据点位,方向,距离计算下一个点的位置
var point = ByDirectionAndLen(ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.headingPitchRoll,100)
//根据计算点位 获取向量
var direction = Cesium.Cartesian3.subtract(
ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,
point,
new Cesium.Cartesian3()
);
//根据点位,方向,距离更新波束雷达
customCylider.change(ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,direction,100000);
}
count=1;
}
});
整体代码如下
window.CesiumEMExtensions = CesiumEMExtensions;
var viewer = new Cesium.Viewer("cesiumContainer", {
animation: false,
baseLayerPicker: false,
fullscreenButton: false,
geocoder: false,
homeButton: false,
infoBox: false,
sceneModePicker: false,
selectionIndicator: false,
timeline: false,
navigationHelpButton: false,
scene3DOnly:true,
imageryProvider: new Cesium.SingleTileImageryProvider({
url: "../images/globe.jpg"
})
});
viewer.extend(CesiumEMExtensions.EMExtensionsMixin);
viewer.scene.debugShowFramesPerSecond = true;
var ev_mtMgr;
var planeNumber = 1;
var itemIndex = 0;
var customCylider=undefined;
let count =0;
setUpMovingTarget(planeNumber);
let preRender = viewer.scene.preRender.addEventListener(() => {
if(ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude!=undefined){
if(count==0){
var direction = Cesium.Cartesian3.subtract(
Cesium.Cartesian3.fromDegrees(121.20, 23.0, 10000),
Cesium.Cartesian3.fromDegrees(121.20, 23.0, 50000),
new Cesium.Cartesian3()
);
customCylider= new CesiumEMExtensions.EV_CustomCylider({
viewer: viewer,
startPosition: ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,
direction: direction,
length: 100000,
fillColor: new Cesium.Color(0.0, 1.0, 1.0, 1.0),
fillStyle: CesiumEMExtensions.EV_CustomCylider.fillType.stripe,
speed: 1.0,
multiply: 10,
show: true,
bottomRadius: 20000,
topRadius: 0,
});
}else{
var point = ByDirectionAndLen(ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.headingPitchRoll,100)
var direction = Cesium.Cartesian3.subtract(
ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,
point,
new Cesium.Cartesian3()
);
customCylider.change(ev_mtMgr.ev_MTFlightDatas.get(itemIndex-1).curTimeAttitude.position,direction,100000);
}
count=1;
}
});
function setUpMovingTarget (planeNumber) {
viewer.scene.postProcessStages.fxaa.enabled = true;
var sTime = new Date().getTime();
var eTime = new Date(sTime + 1000000).getTime();
var timeSpace = eTime - sTime;
var trainingClock = new Cesium.Clock({
startTime: Cesium.JulianDate.fromDate(new Date(sTime)),
currentTime: Cesium.JulianDate.fromDate(new Date(sTime)),
stopTime: Cesium.JulianDate.fromDate(new Date(eTime)),
clockStep: Cesium.ClockStep.SYSTEM_CLOCK_MULTIPLIER,
clockRange: Cesium.ClockRange.UNBOUNDED,
});
function DateManager () {
}
DateManager.prototype.addReceiveDataListener = function() {
}
var ev_dataMgr = new DateManager();
ev_mtMgr = new CesiumEMExtensions.EV_MovingTargetManager({
viewer: viewer,
ev_dataMgr: ev_dataMgr,
trainingClock: trainingClock,
});
var ev_mtLabelConfiTable = new CesiumEMExtensions.EV_MTLabelConfigurationTable({
showBackground: true,
font: "12px sans-serif",
//distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.00001, 400000.0),
});
ev_mtLabelConfiTable.addDisplayFieldPara("id:", "uId");
ev_mtLabelConfiTable.addDisplayFieldPara("经度:", "fLon", 2);
ev_mtLabelConfiTable.addDisplayFieldPara("纬度:", "fLat", 2);
ev_mtLabelConfiTable.addDisplayFieldPara("海拔:", "fAlt", 2);
ev_mtLabelConfiTable.addDisplayFieldPara("机型:", "modelType");
ev_mtMgr.ev_MTLabelConfigurationTables.set(1, ev_mtLabelConfiTable);
trainingClock.shouldAnimate = true;
trainingClock.tick();
var single = [];
var lat = 18;
var height = 90000;
var endLat = 37;
var latNum = 40;//一条纬线上动目标的数量
var i, j, itemStartLat, itemEndLat, itemStartLon, itemEndLon;
var lon = 97;
var endLon = 97;
while (itemIndex < planeNumber) {
i = Math.floor(itemIndex / latNum);
j = itemIndex % latNum;
itemStartLat = lat + i * 0.5;
itemEndLat = endLat + 0.5;
itemStartLon = lon + j * 0.5;
itemEndtLon = endLon + j * 0.5;
var tempMTFlightData = new CesiumEMExtensions.EV_MovingTargetFlightData({
uId: itemIndex,
mtType: 1,
name: "J10",
modelType: 10,
modelLabelVisible: false,
modelUri: Cesium.buildModuleUrl("Assets/EMExtensions/gltf/dsp卫星.gltf"),
modelIconUri: "../images/Flight_1.png",
modelIconDisplayDistance: new Cesium.DistanceDisplayCondition(5000000.0, 50000000.0),
modelIconScale: 0.3,
scale: 100,
specialAttributes: {},
ribbonVisible: false,
forwardOffset: -10,
upOffset: 3,
traceTimeDuration: 30,
barTimeInterval: 20
});
tempMTFlightData.addTimeAttitude({
realTime: sTime,
fLon: itemStartLon,
fLat: itemStartLat,
fAlt: height,
position: Cesium.Cartesian3.fromDegrees(itemStartLon, itemStartLat, height),
nRedOrBlue: 0,
headingPitchRoll: new Cesium.HeadingPitchRoll(0.0, 0.0, 0.0)
});
tempMTFlightData.addTimeAttitude({
realTime: eTime,
fLon: itemEndtLon,
fLat: itemEndLat,
fAlt: height,
position: Cesium.Cartesian3.fromDegrees(itemEndtLon, itemEndLat, height),
nRedOrBlue: 0,
headingPitchRoll: new Cesium.HeadingPitchRoll(0.0, 90, 0.0)
});
ev_mtMgr.addMovingTargetTimeAttitude(itemIndex, tempMTFlightData);
itemIndex++;
}
}
function destroy () {
if (ev_mtMgr) {
ev_mtMgr.removeAllMovingTargets();
ev_mtMgr.destroy();
ev_mtMgr = undefined;
}
}
//参数为什么类型,可根据函数API去传参
//len(单位:m)
//返回的类型可根据API转换坐标即可
function ByDirectionAndLen(position, angle, len){
let matrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
let mz = Cesium.Matrix3.fromRotationX(angle.pitch + Math.PI/2 || 0);
let rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
Cesium.Matrix4.multiply(matrix, rotationZ, matrix);
let result = Cesium.Matrix4.multiplyByPoint(matrix, new Cesium.Cartesian3(0, len, 0),
new Cesium.Cartesian3());
return result;
}
viewer.scene.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(99, 21, 1000000),
});
0
0
相关话题
- 动目标demo
- webgl3.0 多点爆炸gif效果
- EV_WebGL_3.0包(含战保平台)版本发布
- EV_WebGL_2.0包(含战保平台)版本发布
- EV-Globe-WebGL-1.1(不含战保)版本发布(持续更新..........)
- 战保平台2.0升级3.0注意事项
- 电力引擎eengineClient3.0_x64_20230424_EV-Globe5.1_20230423
- 电力引擎eengineClient3.0_x64_20230518_EV-Globe5.1_20230509
- 电力引擎eengineClient3.0_x64_20230509_EV-Globe5.1_20230509
- 电力引擎eengineClient3.0_x64_20230522_EV-Globe5.1_20230519