數字孿生城市三維地圖實現動態加載炫酷三維模型和車輛人員軌跡動畫


數字孿生城市三維地圖簡介

ESMap 城市三維地圖提供了各種各樣的高精度、有趣又炫酷的三維模型,比如建築、樹木、車輛、人員等等,而且還支持各種各樣炫酷的動畫,比如模型的移動、旋轉、閃爍、發光等等。相信很多小伙伴已經迫不及待地想知道如何實現這些動畫,將這些動畫添加到自己的城市三維地圖中,下面就讓小編帶你來看看吧!
image

城市三維地圖初始化

任何炫酷的動畫效果都離不開地圖的依托,由於前面已經介紹過如何初始化 ESMap 城市三維地圖,這里就不過多贅述。如果你還不了解地圖初始化如何操作,可以查看這篇指南 ESMap 城市三維地圖開發指南(上) 或者前往 ESMap 城市三維地圖 SDK 開發文檔

城市三維地圖三維模型創建

本文以小車模型為例,說明如何在地圖中創建三維模型和實現模型動畫。

  • 新建一個三維模型圖層(由於數據加載、頁面渲染的問題,創建三維模型代碼要寫在地圖加載完成事件 map.on('loadComplete') 之后)
var floorLayer = map.getBuildingById(0).getFloor(1);
var layer = new esmap.ESLayer(esmap.ESLayerType.MODEL3D);
  • 創建一個三維模型標注實例
var url = './model/bus2/gongjiaoche.gltf';
var marker3d = new esmap.ES3DMarker({
    x: x,   //x坐標
    y: y,   //y坐標
    id: 2018, //自定義id標識
    name: "myTree", //自定義name
    url: url, //模型的文件地址
    size: 1,  //尺寸
    angle: 0,  //旋轉角
    height: 0,  //高度
    showLevel: 16,  //地圖縮放等級達到多少時隱藏
    spritify: false   //是否跟隨地圖縮放更新大小
});
  • 將三維模型實例添加到樓層對象
layer.addMarker(marker);   //將標注添加到圖層上
floor.addLayer(layer);

最終創建的小車模型如下圖所示:

image

城市三維地圖三維模型動畫實現

模型移動

  • 實現(其中 marker3d 為前面創建的三維模型標注實例)
marker3d.moveTo({
    x: 12683603.861957192, y: 2574670.255345741
})
  • 效果展示

image

模型旋轉

  • 實現
marker3d.rotateTo({
    angle:30    //絕對值,角度
    //time:0.6  //跳躍時間,一般省略
})
  • 效果展示

image

模型跳躍

  • 實現
marker3d.jump({
    times:3,   //次數
    height:8    //高度
    // time:1,  //跳躍時間,一般省略
    //delay:0    //延遲幾秒執行
})
  • 效果展示

image

模型放大縮小

  • 實現
marker3d.setScale(2);
marker3d.restoreScale();
  • 效果展示

image

模型沿着路徑移動

  • 實現
var points = [
{
    x: 12683435.841512972,
    y: 2557888.6579067316,
    fnum: 1,
    // offset:0
},
{
    x: 12683433.708513774,
    y: 2557872.0505466303,
    fnum: 1,
    // offset:0
}];
marker3d.movePath({
    //time:10,    //在指定時間完成移動。與speed參數二選一
    speed: 10,     //速度,設置此項則忽略time
    loop: true,    //是否循環執行
    orientToPathDegree:0,  //物體移動沿向路徑方向的角度
    path: points,   //路徑點集
    offsetHeight: 0,   //移動時的高度
    followPosition:true,//第一人稱視角,跟隨移動位置
    followScaleLevel:1,//第一人稱視角,跟隨縮放地圖大小
    viewTiltAngle:map.maxPolarAngle,//第一人稱視角,地圖俯仰角
    followAngle:true,	//第一人稱視角,根據路徑來動態變換地圖角度
    orientToPath:true,  //物體移動時是否沿向路徑方向
    angle:0,  	//物體移動沿向路徑方向的角度
    complete: function() {
        //動畫執行完成回調事件
    },
    onMoving: function(e) {
        //路徑移動實時回調
        //獲取模型移動中的實時位置
        console.log(e)
    },
});
  • 效果展示

image

更多詳細的三維模型動畫實現,可以前往 ESMap 城市三維地圖 SDK 開發文檔 查看。

三維模型顯示、隱藏及刪除

  • 三維模型隱藏
//隱藏圖層
layer.visible=false;
  • 三維模型刪除
//樓層上根據名字刪除圖層
floorLayer.removeLayersByNames("name");
//樓層上根據類型刪除圖層
floorLayer.removeLayersByTypes(esmap.ESLayerType.MODEL3D);

總結

以上就是使用 ESMap 城市三維地圖實現炫酷的三維模型動畫的全部過程,想要體驗更多 ESMap 城市三維地圖的功能,歡迎前往 ESMap 在線開發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM