Cesium进入模型内部

    Cesium加载的3DTiles模型,包含大楼等室内空间,根据Cesium默认的鼠标滚轮等操作是没有办法进入建筑物内部的,除非通过一些技巧,比如视图移动到旁边再平移进去。对于普通用户来说非常不好操作。网上找了一圈也没有实质性的解决方案,于是自己想了一个实现思路并将其实现和验证。

    由于Cesium的机制是搓滚轮是对鼠标指定的对象无线靠近放大,所以不能直接进入建筑物内部。

    下面的代码是为了实现使用鼠标滚轮搓动直接进入建筑物内部的方法,实现思路是当视图不能再放大时,再搓滚轮就将相机往前移动,实现进入建筑的目的。

function (viewer) {
    let lastWhellCameraPosition = undefined;
    let lastWhellCameraPositionTimes = 0;
    let currentCameraPosition = viewer.camera.position;
    let ellipsoid = viewer.scene.globe.ellipsoid;
    viewer.screenSpaceEventHandler.setInputAction(function onMouseWheel(e) {
        if (e > 0 && lastWhellCameraPosition
            && Math.abs(currentCameraPosition.x - lastWhellCameraPosition.x) < 0.001
            && Math.abs(currentCameraPosition.y - lastWhellCameraPosition.y) < 0.001
            && Math.abs(currentCameraPosition.z - lastWhellCameraPosition.z) < 0.001) {
            if (lastWhellCameraPositionTimes > 1) {
                console.log(e);
                let cameraHeight = ellipsoid.cartesianToCartographic(currentCameraPosition).height;
                viewer.camera.moveForward(cameraHeight / 50.0);
            } else {
                lastWhellCameraPositionTimes++;
            }
        } else {
            lastWhellCameraPositionTimes = 0;
        }
        lastWhellCameraPosition = currentCameraPosition.clone();
    }, Cesium.ScreenSpaceEventType.WHEEL);
};

 

你可能感兴趣的:(webgis,Cesium,js)