Cesium 加载3dtiles数据

Cesium加载3dtiles数据,相对来说也是比较简单。

首先给定页面空间来展示3dtiles数据。

<div id="cesiumContainer"></div>

然后进行空间的绑定。

var viewer = new Cesium.Viewer("cesiumContainer");

可以这样简单的创建viewer,viewer是Cesium的一个核心类。

同时也可以再创建viewer的同时,初始化一些配置属性信息

var viewer = new Cesium.Viewer("cesiumContainer",{
    animation:false, //动画插件
    baseLayerPicker:false,
    geocoder:false,
    navigationHelpButton:false,
    timeline:false,
    fullscreenButton:false,
    homeButton:false,
    infoBox:true,
    scene3DOnly:true,//仅仅显示3d,可隐藏右上角2d和3d按钮
    selectionoIndicatr:false,
    navigationInstructionsInitiallyVisibl:false,
    useDefaultRenderLoop:true,
    showRenderLoopErrors:true,
    projectionPicker:false,//投影选择器
    vrButton:false
});

其他的选项还有很多,可以根据自己的要求来设置。

可以通过下面这个设置来控制Cesium的标识

viewer._cesiumWidget._creditContainer.style.display = "none";

Cesium可以加载不同的底图,当然可以不加载任何底图,在不加载任何底图的时候,底图呈现绿色。如果要修改颜色的话,可以通过设置底图为空,然后设置地球仪的基础颜色来改变。

首先设置imageryProvider为false,然后设置 scene.globe.baseColor ;

加载3dtiles

var tileset = window.viewer.scene.primitives.add(
    new Cesium.Cesium3DTileset({
        url: 'newifc/tileset.json'
    })
);

加载完数据后,可以自定义修改模型的位置。

//加载模型数据并定位到模型
var  params = {
    tx: 117.211047, //模型中心X轴坐标(经度,单位:十进制度)
    ty: 36.867497, //模型中心Y轴坐标(纬度,单位:十进制度)
    tz: 0, //模型中心Z轴坐标(高程,单位:米)
    rx: 0, //X轴(经度)方向旋转角度(单位:度)
    ry: 0, //Y轴(纬度)方向旋转角度(单位:度)
    rz: 0 //Z轴(高程)方向旋转角度(单位:度)
};
tileset.readyPromise
    .then(function() {
        var boundingSphere = tileset.boundingSphere
        window.viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0.0, -0.5, boundingSphere.radius))
        window.viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
        //修改经纬度位置
        tileset._root.transform = update3dtilesMaxtrix(params);
        viewer.zoomTo(tileset);
    })
    .otherwise(function(error) {
        throw error
    });
function update3dtilesMaxtrix(params) {
    //旋转
    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);

    var scale = Cesium.Matrix4.fromUniformScale(0.85);
    // //缩放
    Cesium.Matrix4.multiply(m, scale, m);
    //旋转、平移矩阵相乘
    Cesium.Matrix4.multiply(m, rotationX, m);
    Cesium.Matrix4.multiply(m, rotationY, m);
    Cesium.Matrix4.multiply(m, rotationZ, m);
    //赋值给tileset
    return m;
}

 

同时也可以设置视图位置:

viewer.scene.camera.setView({
    destination: new Cesium.Cartesian3(-2336087.4304109886,4543403.498943987,3815668.7985073784),
    orientation: {
        heading: 1.8657777042174768,
        pitch: -0.24985098126065886,
        roll: 0.0031798578798047927
    }
});

模型数据加载后,仔细观察,模型位置会根据视角的转动而移动。

可以通过viewer.scene.globe.depthTestAgainstTerrain = true;来控制。

至此,Cesium加载3dtiles模型数据,基本完成了。

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值