CESIUM例子学习(五)——Camera Tutorial(1)

在cesium中,对场景的控制,是项目的基本操作,比如,把场景控制在某个范围内,特别是小场景,摄像机只能在厂区范围内;游戏中用A、W、S、D来控制方向等。这一节的例子就是关于这些的。

一、cesium场景模式

cesium场景模式分为三种模式:三维模式、二维模式和2.5维模式,2.5维模式也叫哥伦布模式。三维模式可以对场景进行全角度浏览;二维只能从场景正上方俯视;2.5维可以有一定的倾斜和旋转,观察角度间于二维和三维之间。

二、几个控制场景的属性

下面代码中的属性,默认情况下都是为true的,所以,如果要自己来控制,就需要把它们都设置成false,不建议使用enableInputs属性,因为它控制得范围太大,不太灵活,在实际项目中,可能是在某个情况下不能平移,某个情况下不能倾斜等都是需要单独控制的。如下代码:

  //禁止鼠标的所有操作,对二、三维起作用
    // scene.screenSpaceCameraController.enableInputs = false
    // 禁止鼠标转动操作,对二、三维起作用
    scene.screenSpaceCameraController.enableRotate = false;
    //禁止鼠标倾斜操作,只对三维起作用
    scene.screenSpaceCameraController.enableTilt = false;
    //禁止鼠标平移操作,对二维和哥伦布模式起作用
    scene.screenSpaceCameraController.enableTranslate = false;
    //允许鼠标缩放旋转和平移操作,对三维和哥伦布模式起作用
    scene.screenSpaceCameraController.enableLook = false;
    //禁止鼠标缩放操作,对二、三维起作用
    scene.screenSpaceCameraController.enableZoom = false;

需要注意的是不要把几种属性效果搞混淆了,特别是Rotate与Tilt,不要认为Rotate 是Translate效果,而Tilt才是Rotate效果。cesium三维模式下没有Translate效果。

1、enableRotate 效果如下图:

enableRotate=true 

 2、enableTilt 效果如下图:

enableTilt =true

三、应用例子

例子:当鼠标在地球上时,才可以rotatet 和tilt。部份代码如下:

handler.setInputAction(function (leftzDown) {
        var cartesian3 = viewer.scene.pickPosition(leftzDown.position);
        if (cartesian3) {
            scene.screenSpaceCameraController.enableRotate = true;
        }
    }, Cesium.ScreenSpaceEventType.LEFT_DOWN);

    handler.setInputAction(function (leftUp) {
        scene.screenSpaceCameraController.enableRotate = false;
    }, Cesium.ScreenSpaceEventType.LEFT_UP);

    handler.setInputAction(function (middleDown) {
        var cartesian3 = viewer.scene.pickPosition(middleDown.position);
        if (cartesian3) {
            scene.screenSpaceCameraController.enableTilt = true;
        }
    }, Cesium.ScreenSpaceEventType.MIDDLE_DOWN);
    handler.setInputAction(function (middleUp) {
        scene.screenSpaceCameraController.enableTilt = false;
    }, Cesium.ScreenSpaceEventType.MIDDLE_UP);

    handler.setInputAction(function (movement) {
        var cartesian3 = viewer.scene.pickPosition(movement.endPosition);
        if (!cartesian3) {
            scene.screenSpaceCameraController.enableTilt = false;
        }
        // mousePosition = movement.endPosition;
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

上面代码,实现方法就是

(1)Rotate:鼠标LEFT_DOWN时,判断点击位置是否在地球上,如果是,设置:

 scene.screenSpaceCameraController.enableRotate = true;

鼠标LEFT_UP时:设置 scene.screenSpaceCameraController.enableRotate = false;

(2)Tilt:实现方法就是鼠标MIDDLE_DOWN时,判断点击位置是否在地球上,如果是,设置:

 scene.screenSpaceCameraController.enableTilt = true;

鼠标LEFT_DOWN时:设置 scene.screenSpaceCameraController.enableTilt = false;

在鼠标拖动过程中,判断鼠标位置:

判断点击位置是否在地球上,如果不是,设置:

 scene.screenSpaceCameraController.enableTilt = false;

 

 

你可能感兴趣的:(CESIUM例子学习(五)——Camera Tutorial(1))