var selectedMesh; var i=0;
var viewer = new Cesium.Viewer('cesiumContainer', { infoBox: false, selectionIndicator: false});
var handle = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
function createModel(url, height) { viewer.entities.removeAll();
var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height); var heading = Cesium.Math.toRadians(135); var pitch = 0; var roll = 0; var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, heading, pitch, roll);
var entity = viewer.entities.add({ name: url, position: position, orientation: orientation, model: { uri: url, minimumPixelSize: 128 } }); viewer.trackedEntity = entity;
viewer.clock.onTick.addEventListener(function () { if (selectedMesh) { console.log("Before 0 : " + selectedMesh.primitive.modelMatrix[12]); selectedMesh.primitive.modelMatrix[12] = selectedMesh.primitive.modelMatrix[12] + 1; console.log("After 0 : " + selectedMesh.primitive.modelMatrix[12]); } });}
handle.setInputAction(function (movement) { console.log("LEFT CLICK"); var pick = viewer.scene.pick(movement.position); if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) {
if (!selectedMesh) { selectedMesh = pick; } }}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
var options = [{ text: 'Aircraft', onselect: function () { createModel('../../SampleData/models/CesiumAir/Cesium_Air.bgltf', 5000.0); }}, { text: 'Ground vehicle', onselect: function () { createModel('../../SampleData/models/CesiumGround/Cesium_Ground.bgltf', 0); }}, { text: 'Milk truck', onselect: function () { createModel('../../SampleData/models/CesiumMilkTruck/CesiumMilkTruck.bgltf', 0); }}, { text: 'Skinned character', onselect: function () { createModel('../../SampleData/models/CesiumMan/Cesium_Man.bgltf', 0); }}];
Sandcastle.addToolbarMenu(options);
var heading = 0.0, pitch = 0.0, roll = 0.0, long = 0.0, lat = 0.0, alt = 0.0;
var selectedMesh;
/* MOUSE LEFT BUTTON DOWN */ handle.setInputAction(function(movement){ var pick = this.scene.pick(movement.position);
if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) {
selectedMesh = pick; heading = 0.0, pitch = 0.0, roll = 0.0; } else { this.selectedMesh = null; } }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
viewer.clock.onTick.addEventListener(function() {
if (!selectedMesh) {
return; }
/* Rotation */ var headingDegree = degreesToRadians(heading); var pitchDegree = degreesToRadians(pitch); var rollDegree = degreesToRadians(roll); var headingQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, -headingDegree); var pitchQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Y, -pitchDegree); var rollQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_X, -rollDegree); var headingPitchQuat = Cesium.Quaternion.multiply(headingQuat, pitchQuat, new Cesium.Quaternion()); var rotationQuaternion = Cesium.Quaternion.multiply(headingPitchQuat, rollQuat, new Cesium.Quaternion()); var rotationMatrix = Cesium.Matrix3.fromQuaternion(rotationQuaternion, new Cesium.Matrix3());
var currentRotation = new Cesium.Cartesian3(); Cesium.Matrix4.getRotation(selectedMesh.primitive.modelMatrix, currentRotation);
var newRotation = Cesium.Matrix3.multiply(currentRotation, rotationMatrix, new Cesium.Matrix3()); var currentTranslation = new Cesium.Cartesian3(); Cesium.Matrix4.getTranslation(this.selectedMesh.primitive.modelMatrix, currentTranslation); currentTranslation.x += long; currentTranslation.y += lat; currentTranslation.z += alt;
this.selectedMesh.primitive.modelMatrix = Cesium.Matrix4.fromRotationTranslation(newRotation, currentTranslation, new Cesium.Matrix4()); }); }
document.addEventListener('keyup', (e) => { if (e.keyCode === 'A'.charCodeAt(0)) { heading -= 1; } else if (e.keyCode === 'S'.charCodeAt(0)) { heading += 1; } else if (e.keyCode === 'Z'.charCodeAt(0)) { pitch -= 2; } else if (e.keyCode === 'X'.charCodeAt(0)) { pitch += 2; } else if (e.keyCode === 'Q'.charCodeAt(0)) { roll -= 2; } else if (e.keyCode === 'W'.charCodeAt(0)) { roll += 2; } else if (e.keyCode === 'O'.charCodeAt(0)) { lat -= 1; } else if (e.keyCode === 'P'.charCodeAt(0)) { lat += 1; } else if (e.keyCode === 'K'.charCodeAt(0)) { long -= 1; } else if (e.keyCode === 'L'.charCodeAt(0)) { long += 1; }else if (e.keyCode === 'N'.charCodeAt(0)) { alt -= 1; } else if (e.keyCode === 'M'.charCodeAt(0)) { alt += 1; }
}, false);
var selectedMesh;var i = 0;
var heading = 0.0, pitch = 0.0, roll = 0.0, long = 0.0, lat = 0.0, alt = 0.0;
var viewer = new Cesium.Viewer('cesiumContainer', { infoBox: false, selectionIndicator: false});
var handle = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
function createModel(url, height) {
var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height); var heading = Cesium.Math.toRadians(135); var pitch = 0; var roll = 0; var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, heading, pitch, roll);
var entity = viewer.entities.add({ name: url, position: position, orientation: orientation, model: { uri: url, minimumPixelSize: 128 } }); viewer.trackedEntity = entity;}
function degreesToRadians (val) { return val * Math.PI / 180;}
viewer.clock.onTick.addEventListener(function() {
if (!selectedMesh) { return; }console.log(selectedMesh);
/* Rotation */ var headingDegree = degreesToRadians(heading); var pitchDegree = degreesToRadians(pitch); var rollDegree = degreesToRadians(roll); var headingQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, -headingDegree); var pitchQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Y, -pitchDegree); var rollQuat = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_X, -rollDegree); var headingPitchQuat = Cesium.Quaternion.multiply(headingQuat, pitchQuat, new Cesium.Quaternion()); var rotationQuaternion = Cesium.Quaternion.multiply(headingPitchQuat, rollQuat, new Cesium.Quaternion()); var rotationMatrix = Cesium.Matrix3.fromQuaternion(rotationQuaternion, new Cesium.Matrix3());
var currentRotation = new Cesium.Cartesian3(); Cesium.Matrix4.getRotation(selectedMesh.primitive.modelMatrix, currentRotation);
var newRotation = Cesium.Matrix3.multiply(currentRotation, rotationMatrix, new Cesium.Matrix3());
var currentTranslation = new Cesium.Cartesian3();
Cesium.Matrix4.getTranslation(selectedMesh.primitive.modelMatrix, currentTranslation);
currentTranslation.x += long; currentTranslation.y += lat; currentTranslation.z += alt;
selectedMesh.primitive.modelMatrix = Cesium.Matrix4.fromRotationTranslation(newRotation, currentTranslation, new Cesium.Matrix4());});
document.addEventListener('keyup', function(e) {
handle.setInputAction(function(movement) {
console.log("LEFT CLICK"); var pick = viewer.scene.pick(movement.position); if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) {
heading = 0.0, pitch = 0.0, roll = 0.0, long = 0.0, lat = 0.0, alt = 0.0;
selectedMesh = pick; }}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
createModel('../../SampleData/models/CesiumAir/Cesium_Air.bgltf', 10);
createModel('../../SampleData/models/CesiumGround/Cesium_Ground.bgltf', 0);
--
You received this message because you are subscribed to the Google Groups "cesium-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cesium-dev+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
var position = Cesium.Cartesian3.fromDegrees( plane.position.lon, plane.position.lat, plane.position.alt);
viewer.entities.add({
id: plane.id,
model: {
uri: plane.modelUrl
},
position : position,
orientation: Cesium.Transforms.headingPitchRollQuaternion(
position,
plane.orientation.heading,
plane.orientation.pitch,
plane.orientation.roll
)
});
function createModel(url, height) { var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height);
var heading = Cesium.Math.toRadians(135); var pitch = 0; var roll = 0; var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, heading, pitch, roll);
var entity = viewer.entities.add({ name: url, position: position, orientation: orientation, model: { uri: url, minimumPixelSize: 128 } }); viewer.trackedEntity = entity;
}
createModel('../../SampleData/models/CesiumAir/Cesium_Air.bgltf', 10);
createModel('../../SampleData/models/CesiumGround/Cesium_Ground.bgltf', 0);
var createModel = function(lon, lat, alt, heading, pitch, roll) {
var model = scene.primitives.add(Cesium.Model.fromGltf({
url : '../../SampleData/models/CesiumAir/Cesium_Air.gltf'
}));
model.readyToRender.addEventListener(function(model) {
// Play and loop all animations at half-spead
model.activeAnimations.addAll({
speedup : 0.5,
loop : Cesium.ModelAnimationLoop.REPEAT
});
viewer.clock.onTick.addEventListener(function() {
positionModel(model, lon, lat, alt, heading, pitch, roll);
positionCamera(model);
//lon = lon+0.00001;
//lat = lat+0.000005;
//alt = alt+0.01;
heading += 0.01;
pitch += 0.05;
roll += 0.1;
});
});
};
...
function createModel(url, height) {viewer.entities.removeAll();
var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height);var heading = Cesium.Math.toRadians(135);var pitch = 0;var roll = 0;var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, heading, pitch, roll);var entity = viewer.entities.add({name: url,position: position,orientation: orientation,model: {uri: url,minimumPixelSize: 128}});viewer.trackedEntity = entity;}
handle.setInputAction(function(movement) { console.log("LEFT CLICK"); var pick = viewer.scene.pick(movement.position); if (Cesium.defined(pick) && Cesium.defined(pick.node) && Cesium.defined(pick.mesh)) {
selectedMesh = pick;
}}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
...
selectedMesh.id.position._value = currentTranslation; selectedMesh.id.orientation._value = newRotation;