CesiumGS / CesiumGS/cesium

Make VelocityOrientationProperty better handle case where entity stops

Open
#8,900 3 comments 0 reactions 0 assignees View on GitHub
category - entity type - enhancement
Dominant language
JavaScript
Stars
15.7k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

`VelocityOrientationProperty` is very useful when you have a vehicle or aircraft that's moving, and you don't have any data on its orientation, and want to visualize the direction it's moving in. It's used in the Time Dynamic Wheels example:

https://sandcastle.cesium.com/index.html?src=Time%20Dynamic%20Wheels.html

The issue is that if the vehicle stops, the orientation becomes undefined, causing an abrupt change in the vehicle's orientation. You can see it in [this modified Sandcastle example](https://sandcastle.cesium.com/index.html#c=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) where the vehicle stops halfway through.

There's no "correct" orientation here. Intuitively you want to have it use the last orientation (which could be different depending on if you're scrubbing the timeline forwards or backwards). With that said, I think having CesiumJS just keep the last defined orientation and use that in cases when the entity isn't moving would look and feel a lot better.

Otherwise the workaround needed for this is to define a composite property that defines the orientation as `VelocityOrientationProperty` when the vehicle is moving, and otherwise use a constant orientation that you manually specify for the periods where the vehicle isn't moving.

Originally came up on the forum:

* https://community.cesium.com/t/the-orientation-of-vehicles-has-problem-when-waiting-in-front-of-traffic-light/8264/2
* https://community.cesium.com/t/should-cesium-extrapolationtype-hold-consider-last-known-orientation/9593/2

Contributor guide

Open the contributing guide

Research direction

Start with the VelocityOrientationProperty implementation and reproduce the behavior in the modified Time Dynamic Wheels Sandcastle example linked in the issue. Trace how orientation is computed when the vehicle stops, then verify that the last defined orientation is retained during stopped intervals, including timeline scrubbing forwards or backwards.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
computer-graphics
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.