1. 程式人生 > >cesium入門(七)

cesium入門(七)

cesium入門(七)

可視空間資料

  • 3D貼圖支援開源的幾種模型還有CAD,BIM,點雲,相機模型這幾種模型的互動。
  • 有時候模型可能有偏差,這時我們可以自己修改每個點的模型值,最好是傳入一個轉換矩陣這樣的會就會進行一次全新的變換
/ Adjust the tileset height so its not floating above terrain
var heightOffset = -32;
city.readyPromise.then(function(tileset) {
    // Position tileset
    var boundingSphere = tileset.boundingSphere
; var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center); var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0); var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, heightOffset); var translation = Cesium.Cartesian
3.subtract(offset, surface, new Cesium.Cartesian3()); tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); });

3D模型的載入

  • cesium支援新型的模型格式glTF,現在支援到2.0,同樣也提供怎麼通過私有的api把載入模型,以及其它格式到glTF的轉換操作
var
scene = viewer.scene; var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 0.0)); var model = scene.primitives.add(Cesium.Model.fromGltf({ url : '../../SampleData/models/CesiumGround/Cesium_Ground.gltf', modelMatrix : modelMatrix, scale : 200.0 }));
  • 同樣我可播放glTF的動畫如下
Cesium.when(model.readyPromise).then(function(model) {
    model.activeAnimations.addAll({
        loop : Cesium.ModelAnimationLoop.REPEAT,
         speedup : 0.5,
    reverse : true
    });
});
  • 拾取不太懂
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(
    function (movement) {
        var pick = scene.pick(movement.endPosition);
        if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) {
            console.log('node: ' + pick.node.name + '. mesh: ' + pick.mesh.name);
        }
    },
    Cesium.ScreenSpaceEventType.MOUSE_MOVE
);