Цезий: вид спереди отслеживаемого объекта

Мне нужно получить вид спереди для объекта отслеживания, который будет меняться в зависимости от перемещений объектов.

Когда я присваиваю значение свойству viewer.trackedEntity, камера принимает определенное положение. Можно ли изменить это положение так, чтобы камера находилась прямо перед объектом слежения?

Как я могу сделать это для этого примера?

var viewer = new Cesium.Viewer('cesiumContainer', {
    infoBox: false, 
    selectionIndicator: false,
    shouldAnimate: true, 
    terrainProvider: Cesium.createWorldTerrain()
});

var start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16));
var stop = Cesium.JulianDate.addSeconds(start, 360, new Cesium.JulianDate());

viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
viewer.clock.multiplier = 10;

viewer.timeline.zoomTo(start, stop);

var position = new Cesium.SampledPositionProperty();
position.addSample(start, Cesium.Cartesian3.fromDegrees(-118.243683, 34.052235, 500000));
position.addSample(Cesium.JulianDate.addSeconds(start, 250, new Cesium.JulianDate()), Cesium.Cartesian3.fromDegrees(-110, 35.5, 500000));
position.addSample(Cesium.JulianDate.addSeconds(start, 500, new Cesium.JulianDate()), Cesium.Cartesian3.fromDegrees(-86.134903, 40.267193, 500000));

var entity = viewer.entities.add({
    availability : new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
        start : start,
        stop : stop
    })]),
    position : position,
    orientation : new Cesium.VelocityOrientationProperty(position),
    model : {
        uri : 'https://cesiumjs.org/Cesium/Apps/SampleData/models/CesiumAir/Cesium_Air.gltf',
        minimumPixelSize : 64
    },
    path : {
        resolution : 1,
        material : new Cesium.PolylineGlowMaterialProperty({
            glowPower : 0.1,
            color : Cesium.Color.YELLOW
        }),
        width : 10
    }
});

viewer.trackedEntity = entity;
<link href = "https://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" rel = "stylesheet"/>
<script src = "https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js"></script>

<style>
    @import url(../templates/bucket.css);
</style>
<div id = "cesiumContainer" class = "fullSize"></div>
<div id = "loadingOverlay"><h1>Loading...</h1></div>
<div id = "toolbar">
    <div id = "interpolationMenu"></div>
</div>

Здравствуйте, Оллазарев, не могли бы вы отметить ответ как положительный, чтобы мы могли иметь этот тег вопроса как решенный?

SirPeople 13.11.2020 11:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
15
1
2 699
1

Ответы 1

При добавлении сущностей в Cesium.Viewer у вас есть один атрибут в сущности, viewFrom, поэтому, выполнив что-то вроде:

var entity = viewer.entities.add({
    availability : new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
        start : start,
        stop : stop
    })]),
    position : position,
    orientation : new Cesium.VelocityOrientationProperty(position),
    model : {
        uri : 
'https://cesiumjs.org/Cesium/Apps/SampleData/models/CesiumAir/Cesium_Air.gltf',
        minimumPixelSize : 64
    },
    path : {
        resolution : 1,
        material : new Cesium.PolylineGlowMaterialProperty({
            glowPower : 0.1,
            color : Cesium.Color.YELLOW
        }),
        width : 10
    },
    viewFrom: new Cesium.Cartesian3(30, 0, 0),
});

Вы можете получить желаемый эффект, заметив, что viewFrom является объектом Cartesian3, поэтому, если вам нужен вид спереди, где видна плоскость YZ, вы должны установить расстояние только по оси X. Заявление об ограничении ответственности: Как указано в комментариях, это Восток-Север-Верх, поэтому XYZ зависит от ориентации самого транспортного средства.

Должен признаться, что документация для этого довольно плохой, и в этом поведении даже была ошибка.

Но после долгое обсуждение на их форуме вы могли узнать, как это работает

Насколько я знаю, это правильный ответ. Но viewFrom определен в кадре Восток-Север-Верх, поэтому правильный вектор для предоставления здесь зависит от ориентации транспортного средства. Цезиевая камера не следует за сущностью в рамке ее тела, поэтому не будет вращаться вместе с ней. Теоретически можно разветвить класс EntityView и создать модифицированную версию, использующую ориентацию сущностей, но это может превратиться в большой проект, выходящий за рамки ответа SO.

emackey 24.07.2018 22:12

правда, вы совершенно правы. Другой вариант - использовать опцию lookAt, но я боюсь, что результат тот же ... Но давайте посмотрим, может ли при этом OP иметь какие-то направляющие линии

SirPeople 24.07.2018 22:57

Другие вопросы по теме