CesiumGS / CesiumGS/cesium

depthFailMaterial for dynamic polylines

Open
#5,333 20 comments 0 reactions 0 assignees View on GitHub
category - polyline onramping priority - high type - enhancement
Dominant language
JavaScript
Stars
15.7k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

The new `depthFailMaterial` property currently only works for static polyline entities. This is because the `PolylineGeometryUpdater` uses a `PolylineGeometry` for static polylines and a `PolylineCollection` for dynamic ones. We'll need to add depth fail material support to the `PolylineCollection`

``` javascript
var viewer = new Cesium.Viewer('cesiumContainer');
var cesiumTerrainProviderMeshes = new Cesium.CesiumTerrainProvider({
url : 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
requestWaterMask : true,
requestVertexNormals : true
});
viewer.terrainProvider = cesiumTerrainProviderMeshes;
viewer.scene.globe.depthTestAgainstTerrain = true;

var length = 1000;

var startLon = Cesium.Math.toRadians(86.953793);
var endLon = Cesium.Math.toRadians(86.896497);

var lat = Cesium.Math.toRadians(27.988257);

var terrainSamplePositions = [];
for (var i = 0; i < length; ++i) {
var lon = Cesium.Math.lerp(endLon, startLon, i / (length - 1));
var position = new Cesium.Cartographic(lon, lat);
terrainSamplePositions.push(position);
}

var positions = [];
function getPositions() {
return positions;
}
viewer.entities.add({
polyline : {
positions : new Cesium.CallbackProperty(getPositions, false),
followSurface : false,
width : 5,
material : new Cesium.PolylineOutlineMaterialProperty({
color : Cesium.Color.ORANGE,
outlineWidth : 2,
outlineColor : Cesium.Color.BLACK
}),
depthFailMaterial : new Cesium.PolylineOutlineMaterialProperty({
color : Cesium.Color.RED,
outlineWidth : 2,
outlineColor : Cesium.Color.BLACK
})
}
});

Cesium.when(Cesium.sampleTerrainMostDetailed(viewer.terrainProvider, terrainSamplePositions), function(samples) {
var offset = 10.0;
for (var i = 0; i < samples.length; ++i) {
samples[i].height += offset;
}
positions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(samples);

var target = new Cesium.Cartesian3(300770.50872389384, 5634912.131394585, 2978152.2865545116);
offset = new Cesium.Cartesian3(6344.974098678562, -793.3419798081741, 2499.9508860763162);
viewer.camera.lookAt(target, offset);
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
});
```

Contributor guide

Open the contributing guide

Research direction

Start by reading PolylineGeometryUpdater and the PolylineCollection path described in the issue, then run the supplied dynamic-polyline reproduction with terrain depth testing enabled. Trace how static polylines apply depthFailMaterial and identify the corresponding dynamic path. Done means dynamic polylines render their depth-fail material when occluded by terrain, without regressing static polylines.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.