Cesium 調整3DTiles模型高度、旋轉及比例大小


1.調整模型高度

 1    var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
 2             url: '../waterModel_TaiHu/tileset.json'
 3         }));
 4         viewer.scene.primitives.add(tileset);
 5         tileset.readyPromise.then(function(tileset) {
 6             var boundingSphere = tileset.boundingSphere; 
 7             var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
 8             var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
 9             var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height);
10             var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
11             tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
12             
13             //viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius * 1.0));
14         });

2.旋轉模型

   var params = {
    tx: 121,  //模型中心X軸坐標(經度,單位:十進制度)
    ty: 32,    //模型中心Y軸坐標(緯度,單位:十進制度)
    tz: 50,    //模型中心Z軸坐標(高程,單位:米)
    rx: 0,    //X軸(經度)方向旋轉角度(單位:度)
    ry: 0,    //Y軸(緯度)方向旋轉角度(單位:度)
    rz: 0      //Z軸(高程)方向旋轉角度(單位:度)
};
var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
            url: '../waterModel_TaiHu/tileset.json'
        }));
        viewer.scene.primitives.add(tileset);
        tileset.readyPromise.then(function(tileset) {
     update3dtilesMaxtrix(tileset);
            
            //viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius * 1.0));
        });
function update3dtilesMaxtrix(tileset) {
    //旋轉
    var mx = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(params.rx));
    var my = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(params.ry));
    var mz = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(params.rz));
    var rotationX = Cesium.Matrix4.fromRotationTranslation(mx);
    var rotationY = Cesium.Matrix4.fromRotationTranslation(my);
    var rotationZ = Cesium.Matrix4.fromRotationTranslation(mz);
    //平移
    var position = Cesium.Cartesian3.fromDegrees(params.tx, params.ty, params.tz);
    var m = Cesium.Transforms.eastNorthUpToFixedFrame(position);
    //旋轉、平移矩陣相乘
    Cesium.Matrix4.multiply(m, rotationX, m);
    Cesium.Matrix4.multiply(m, rotationY, m);
    Cesium.Matrix4.multiply(m, rotationZ, m);
    //賦值給tileset
    tileset._root.transform = m;
}

3.修改模型大小尺寸

 var scale = Cesium.Matrix4.fromUniformScale(0.6)
        Cesium.Matrix4.multiply(m, scale, m)

 

 


免責聲明!

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



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