【Cesium Sandcastle 研究2】- Camera

效果

访问地址:

http://localhost:8080/Apps/Sandcastle/index.html?src=Camera%20Tutorial.html&label=Tutorials

在这里插入图片描述
通过键盘及鼠标控制相机

知识点
// Gets an ellipsoid describing the shape of this globe.
var ellipsoid = scene.globe.ellipsoid;

禁用系统的默认事件: 例如 旋转,平移,缩放等

// disable the default event handlers
scene.screenSpaceCameraController.enableRotate = false;
scene.screenSpaceCameraController.enableTranslate = false;
scene.screenSpaceCameraController.enableZoom = false;
scene.screenSpaceCameraController.enableTilt = false;
scene.screenSpaceCameraController.enableLook = false;

相机句柄
scene.screenSpaceCameraController
Gets the controller for camera input handling.

处理用户输入事件。可以添加自定义功能,以便在用户输入输入时执行。

var handler = new Cesium.ScreenSpaceEventHandler(canvas);


// 获取鼠标开始按下的位置
handler.setInputAction(function(movement) {
    flags.looking = true;
    mousePosition = startMousePosition = Cesium.Cartesian3.clone(movement.position);
}, Cesium.ScreenSpaceEventType.LEFT_DOWN);

// 鼠标开始移动
handler.setInputAction(function(movement) {
    mousePosition = movement.endPosition;
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

// 鼠标左键抬起时,关闭查看视角
handler.setInputAction(function(position) {
    flags.looking = false;
}, Cesium.ScreenSpaceEventType.LEFT_UP);

绑定按键按下和抬起的动作。

很优雅:
typeof flagName !== ‘undefined’

document.addEventListener('keydown', function(e) {
    var flagName = getFlagForKeyCode(e.keyCode);
    if (typeof flagName !== 'undefined') {
        flags[flagName] = true;
    }
}, false);

document.addEventListener('keyup', function(e) {
    var flagName = getFlagForKeyCode(e.keyCode);
    if (typeof flagName !== 'undefined') {
        flags[flagName] = false;
    }
}, false);

定时执行相关代码

// Gets the camera.
var camera = viewer.camera;


// 计时器,定时刷新,执行自定义函数处理
viewer.clock.onTick.addEventListener(function(clock) {



var width = canvas.clientWidth;
var height = canvas.clientHeight;


// 获取移动鼠标的坐标位置
// Coordinate (0.0, 0.0) will be where the mouse was clicked.
var x = (mousePosition.x - startMousePosition.x) / width;
var y = -(mousePosition.y - startMousePosition.y) / height;

// 将提供的笛卡尔转换为制图表示。笛卡尔在椭圆体的中心未定义。
var cameraHeight = ellipsoid.cartesianToCartographic(camera.position).height;
var moveRate = cameraHeight / 100.0;


相机移动的相关代码:

camera.lookRight(moveRate);
camera.lookUp(moveRate);

camera.moveForward(moveRate);
camera.moveBackward(moveRate);
camera.moveUp(moveRate);
camera.moveDown(moveRate);
camera.moveLeft(moveRate);
camera.moveRight(moveRate);
总结
  1. 禁用系统事件
  2. 通过 ScreenSpaceEventHandler 绑定鼠标事件处理函数; 通过 document.addEventListener 绑定键盘事件处理函数
  3. viewer.clock.onTick 更新 camera 相关操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值