177 lines
5.1 KiB
HTML
177 lines
5.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
|
|
<meta name="description" content="Use the camera to control the view, and create custom event handlers for input.">
|
|
<meta name="cesium-sandcastle-labels" content="Tutorials, Showcases">
|
|
<title>Cesium Demo</title>
|
|
<script type="text/javascript" src="../Sandcastle-header.js"></script>
|
|
<script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script>
|
|
<script type="text/javascript">
|
|
require.config({
|
|
baseUrl : '../../../Source',
|
|
waitSeconds : 60
|
|
});
|
|
</script>
|
|
</head>
|
|
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
|
|
<style>
|
|
@import url(../templates/bucket.css);
|
|
</style>
|
|
<div id="cesiumContainer" class="fullSize"></div>
|
|
<div id="loadingOverlay"><h1>Loading...</h1></div>
|
|
<div id="toolbar">
|
|
<table class="infoPanel">
|
|
<tbody>
|
|
<tr>
|
|
<td>Click on the Cesium display to start.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>w/s - move forward/backward</td>
|
|
</tr>
|
|
<tr>
|
|
<td>a/d - move left/right</td>
|
|
</tr>
|
|
<tr>
|
|
<td>q/e - move up/down</td>
|
|
</tr>
|
|
<tr>
|
|
<td>left mouse button down plus mouse move changes the look direction</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<script id="cesium_sandcastle_script">
|
|
function startup(Cesium) {
|
|
'use strict';
|
|
//Sandcastle_Begin
|
|
var viewer = new Cesium.Viewer('cesiumContainer');
|
|
|
|
var scene = viewer.scene;
|
|
var canvas = viewer.canvas;
|
|
canvas.setAttribute('tabindex', '0'); // needed to put focus on the canvas
|
|
canvas.onclick = function() {
|
|
canvas.focus();
|
|
};
|
|
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;
|
|
|
|
var startMousePosition;
|
|
var mousePosition;
|
|
var flags = {
|
|
looking : false,
|
|
moveForward : false,
|
|
moveBackward : false,
|
|
moveUp : false,
|
|
moveDown : false,
|
|
moveLeft : false,
|
|
moveRight : false
|
|
};
|
|
|
|
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);
|
|
|
|
function getFlagForKeyCode(keyCode) {
|
|
switch (keyCode) {
|
|
case 'W'.charCodeAt(0):
|
|
return 'moveForward';
|
|
case 'S'.charCodeAt(0):
|
|
return 'moveBackward';
|
|
case 'Q'.charCodeAt(0):
|
|
return 'moveUp';
|
|
case 'E'.charCodeAt(0):
|
|
return 'moveDown';
|
|
case 'D'.charCodeAt(0):
|
|
return 'moveRight';
|
|
case 'A'.charCodeAt(0):
|
|
return 'moveLeft';
|
|
default:
|
|
return 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);
|
|
|
|
viewer.clock.onTick.addEventListener(function(clock) {
|
|
var camera = viewer.camera;
|
|
|
|
if (flags.looking) {
|
|
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 lookFactor = 0.05;
|
|
camera.lookRight(x * lookFactor);
|
|
camera.lookUp(y * lookFactor);
|
|
}
|
|
|
|
// Change movement speed based on the distance of the camera to the surface of the ellipsoid.
|
|
var cameraHeight = ellipsoid.cartesianToCartographic(camera.position).height;
|
|
var moveRate = cameraHeight / 100.0;
|
|
|
|
if (flags.moveForward) {
|
|
camera.moveForward(moveRate);
|
|
}
|
|
if (flags.moveBackward) {
|
|
camera.moveBackward(moveRate);
|
|
}
|
|
if (flags.moveUp) {
|
|
camera.moveUp(moveRate);
|
|
}
|
|
if (flags.moveDown) {
|
|
camera.moveDown(moveRate);
|
|
}
|
|
if (flags.moveLeft) {
|
|
camera.moveLeft(moveRate);
|
|
}
|
|
if (flags.moveRight) {
|
|
camera.moveRight(moveRate);
|
|
}
|
|
});
|
|
//Sandcastle_End
|
|
Sandcastle.finishedLoading();
|
|
}
|
|
if (typeof Cesium !== 'undefined') {
|
|
startup(Cesium);
|
|
} else if (typeof require === 'function') {
|
|
require(['Cesium'], startup);
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|