Cesium如何修改3dtiles的位置信息偏移经纬度高度和旋转角度

1.根据前后经纬度和高度计算变换矩阵-平移矩阵:

step1:根据tileset的边界球体中心点的笛卡尔坐标得到经纬度坐标

step2:根据经纬度和高度0,得到地面笛卡尔坐标

step3:根据经纬度和需要的高度,得到偏移后的笛卡尔坐标

step4:计算坐标变换,得到新的笛卡尔坐标

根据变换得到Matrix4变换矩阵

 

  var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);
    var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
    var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height);
    var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
    tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);

1.根据旋转角度计算变换矩阵-旋转矩阵:

var hprRollZero = new Cesium.HeadingPitchRoll();

var position=Cesium.Cartesian3.fromDegrees(-123.075, 44.045000, 5000.0)

var converter= Cesium.Transforms.eastNorthUpToFixedFrame

var hpRoll = new Cesium.HeadingPitchRoll();

//计算原始的modelMatrix

  var modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(position, hprRollZero, Cesium.Ellipsoid.WGS84, converter);
    scene.primitives.add(new Cesium.DebugModelMatrixPrimitive({
        modelMatrix : modelMatrix,
        length : 300.0,
        width : 10.0
    }));

//当hproll变化后,计算新的modelMatrix

//每次移动单位为1度,转为弧度

// turn right
  hpRoll.heading += deltaRadians;

//

 hpRoll.pitch -= deltaRadians;

var deltaRadians = Cesium.Math.toRadians(1.0);

var medelMaxtrix=Cesium.Transforms.headingPitchRollToFixedFrame(position, hpRoll, Cesium.Ellipsoid.WGS84, converter, primitive.modelMatrix);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyan_gis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值