Skip to content

Commit 318821f

Browse files
committed
Add clamp to 3d tiles demo
1 parent 5e133ff commit 318821f

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
6+
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
7+
<meta name="description" content="Clamp a model to a 3D Tileset using the sampleHeight function.">
8+
<meta name="cesium-sandcastle-labels" content="Showcases">
9+
<title>Cesium Demo</title>
10+
<script type="text/javascript" src="../Sandcastle-header.js"></script>
11+
<script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script>
12+
<script type="text/javascript">
13+
if(typeof require === 'function') {
14+
require.config({
15+
baseUrl : '../../../Source',
16+
waitSeconds : 120
17+
});
18+
}
19+
</script>
20+
</head>
21+
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
22+
<style>
23+
@import url(../templates/bucket.css);
24+
</style>
25+
<div id="cesiumContainer" class="fullSize"></div>
26+
<div id="loadingOverlay"><h1>Loading...</h1></div>
27+
<div id="toolbar"></div>
28+
<script id="cesium_sandcastle_script">
29+
function startup(Cesium) {
30+
'use strict';
31+
//Sandcastle_Begin
32+
var viewer = new Cesium.Viewer('cesiumContainer', {
33+
terrainProvider : Cesium.createWorldTerrain()
34+
});
35+
var scene = viewer.scene;
36+
37+
var start = Cesium.JulianDate.fromIso8601('2018-07-19T15:18:00Z');
38+
var stop = Cesium.JulianDate.fromIso8601('2018-07-19T15:18:30Z');
39+
var duration = Cesium.JulianDate.secondsDifference(stop, start);
40+
41+
viewer.timeline.zoomTo(start, stop);
42+
43+
var clock = viewer.clock;
44+
clock.startTime = start;
45+
clock.currentTime = start;
46+
clock.stopTime = stop;
47+
clock.multiplier = 5.0;
48+
clock.clockRange = Cesium.ClockRange.LOOP_STOP;
49+
50+
var tileset = viewer.scene.primitives.add(
51+
new Cesium.Cesium3DTileset({
52+
url: Cesium.IonResource.fromAssetId(6074)
53+
})
54+
);
55+
56+
viewer.camera.setView({
57+
destination: new Cesium.Cartesian3(1216403.8845586285, -4736357.493351395, 4081299.715698949),
58+
orientation: new Cesium.HeadingPitchRoll(4.2892217081808806, -0.4799070147502502, 6.279789177843313),
59+
endTransform : Cesium.Matrix4.IDENTITY
60+
});
61+
62+
var startCartographic = Cesium.Cartographic.fromRadians(-1.3194173278580692, 0.6987983245671457, 79.48429974087243);
63+
var stopCartographic = Cesium.Cartographic.fromRadians(-1.319414626509859, 0.6987897506061312, 76.52729244635204);
64+
var startPosition = Cesium.Cartographic.toCartesian(startCartographic);
65+
var endPosition = Cesium.Cartographic.toCartesian(stopCartographic);
66+
67+
var velocity = Cesium.Cartesian3.normalize(Cesium.Cartesian3.subtract(endPosition, startPosition, new Cesium.Cartesian3()), new Cesium.Cartesian3());
68+
var rotationMatrix = Cesium.Transforms.rotationMatrixFromPositionVelocity(startPosition, velocity);
69+
var orientation = Cesium.Quaternion.fromRotationMatrix(rotationMatrix, new Cesium.Quaternion());
70+
71+
var entity = viewer.entities.add({
72+
position : startPosition,
73+
orientation : orientation,
74+
model : {
75+
uri : '../../SampleData/models/CesiumMilkTruck/CesiumMilkTruck.glb'
76+
}
77+
});
78+
79+
function toggleShow(show) {
80+
// Toggle show for everything except the tileset
81+
var primitives = scene.primitives;
82+
var length = primitives.length;
83+
for (var i = 0; i < length; ++i) {
84+
var primitive = primitives.get(i);
85+
if (primitive !== tileset) {
86+
primitive.show = show;
87+
}
88+
}
89+
}
90+
91+
function calculatePosition(offset) {
92+
var currentPosition = Cesium.Cartesian3.lerp(startPosition, endPosition, offset, new Cesium.Cartesian3());
93+
var currentCartographic = Cesium.Cartographic.fromCartesian(currentPosition);
94+
toggleShow(false);
95+
var height = scene.sampleHeight(currentCartographic);
96+
toggleShow(true);
97+
if (Cesium.defined(height)) {
98+
currentCartographic.height = height;
99+
currentPosition = Cesium.Cartographic.toCartesian(currentCartographic);
100+
return currentPosition;
101+
}
102+
}
103+
104+
function initialViewReady(tileset, callback) {
105+
var allTilesLoadedFunction = function() {
106+
callback();
107+
tileset.allTilesLoaded.removeEventListener(allTilesLoadedFunction);
108+
};
109+
tileset.allTilesLoaded.addEventListener(allTilesLoadedFunction);
110+
}
111+
112+
initialViewReady(tileset, function() {
113+
viewer.clock.shouldAnimate = true;
114+
scene.postRender.addEventListener(function() {
115+
var timer = Cesium.JulianDate.secondsDifference(viewer.clock.currentTime, start);
116+
var offset = Cesium.Math.clamp(timer / duration, 0.0, 1.0);
117+
entity.position = calculatePosition(offset);
118+
});
119+
});
120+
//Sandcastle_End
121+
Sandcastle.finishedLoading();
122+
}
123+
if (typeof Cesium !== 'undefined') {
124+
startup(Cesium);
125+
} else if (typeof require === 'function') {
126+
require(['Cesium'], startup);
127+
}
128+
</script>
129+
</body>
130+
</html>

0 commit comments

Comments
 (0)