美文网首页
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