美文网首页
SuperMap iClient3D for WebGL教程 轨

SuperMap iClient3D for WebGL教程 轨

作者: SuperMap技术控 | 来源:发表于2022-02-07 09:31 被阅读0次

SuperMap iClient3D for WebGL教程 轨迹动画(一) -Entity

WuYK

WebGL,模型数据是非常重要的一环。我们可以通过切缓存来加载各式各样的模型来构建三维场景。但是实际应用中,我们不仅存在像高楼这样的"静态模型",还具有汽车这样的"动态模型"。那么我们如何让模型"动起来"?

其实大致上可以分为三种形式:
==一:通过Entity添加模型,利用Entity的时间节点属性来实现动态效果==

==二:通过Kml添加模型,通过设置Kml文件的节点参数来实现动态效果==

==三:通过DynamicLayer3D添加模型,通过该动态图层实现动态效果==

  **本篇文章主要介绍如何通过Entity实现动态效果**

一.设置场景时间

    var start = Cesium.JulianDate.fromDate(new Date());
var stop = Cesium.JulianDate.addSeconds(start, 30, new Cesium.JulianDate());
   viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();        
viewer.clock.multiplier = 1;

二.设置时间节点参数

首先初始化SampledPositionProperty()类

var property = new Cesium.SampledPositionProperty();

再通过

property.addSample(time, position)

依次添加位置节点与对应的时间节点,通过Cesium自带的property机制去响应

三.加载模型

viewer.entities.add(new Cesium.Entity({
orientation: new Cesium.VelocityOrientationProperty(property),
model: new Cesium.ModelGraphics({
  uri: 'ExportModel.gltf',
}),
position: property
}));

由上述代码可以看出,主要有三个参数实现。
1.orientation //表示模型的方向,此处用的是根据位置时间点计算自适应方向
2.model //模型地址,目前只能加载Gltf格式模型
3.position //设置模型的位置,此处用的是SampledPositionProperty

以下为一个简单小

varhanderLinean =newCesium.DrawHandler(viewer, Cesium.DrawMode.Line);
handerLinean.activate();
handerLinean.drawEvt.addEventListener(function(line) {
line.object.width = 7;
varlength = line.object._actualPositions.length;
varstart = Cesium.JulianDate.fromDate(newDate());
varstop = Cesium.JulianDate.addSeconds(start, length * 10,newCesium.JulianDate());
console.log(length);
viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.clockRange = Cesium.ClockRange.CLAMPED; //小车运动一次后停止,不循环
viewer.clock.multiplier = 1; //时间间隔单位
varposition = computeCirclularFlight(line, start, stop);
varlk = viewer.entities.add(newCesium.Entity({
orientation:newCesium.VelocityOrientationProperty(position),
model:newCesium.ModelGraphics({
uri: 'ExportModel.gltf',
minimumPixelSize: 32,
maximumScale: 32,
}),
position: position
}));
});
functioncomputeCirclularFlight(line, start, stop) {
varlength = line.object._actualPositions.length;
varproperty =newCesium.SampledPositionProperty();
varpoint = [];
varsum = 0;
for(vari = 0; i < length; i++) {
varposition = line.object._actualPositions[i];
if(i > 0) {
varprepostion = line.object._actualPositions[i - 1];
vardistance = Cesium.Cartesian3.distance(position, prepostion);
}
sum += distance || 0;
vartime = Cesium.JulianDate.addSeconds(start, sum / 20,newCesium.JulianDate());
if(i === length - 1) {
viewer.clock.stopTime = time;
}
property.addSample(time, position);
}
returnproperty;
}

相关文章

网友评论

      本文标题:SuperMap iClient3D for WebGL教程 轨

      本文链接:https://www.haomeiwen.com/subject/ykxmkrtx.html