I notice a problem where if you set baseLayerPicker to ‘false’ then Scene.pickPosition seems the return garbage.
checkout the console logging in the following example. Right click on map and it should print lat, lon, height. it all works fine when leaving baseLayerPicker to default to true, but when marked false, the height value gets strange.
Sandcastle Example
any tips?
1 Like
Shashi
September 4, 2021, 9:04am
2
I’m also looking for a solution to the same issue pls send tips if any?
I believe it is a bug introduced in the latest version.
did you try it on a bit old version?
1 Like
Shashi
September 6, 2021, 4:21am
4
Yes, which version it’s working fine pls let me know.
Shashi
September 7, 2021, 5:40am
5
@poncho524
I’ve applied this and it’s working fine for me.
var viewer = new Cesium.Viewer(‘cesiumContainer’, {
baseLayerPicker: true,
terrainProvider: Cesium.createWorldTerrain()
});
viewer.scene.canvas.addEventListener(‘contextmenu’, (event) => {
event.preventDefault();
const mousePosition = new Cesium.Cartesian2(event.clientX, event.clientY);
const selectedLocation = viewer.scene.pickPosition(mousePosition);
setMarkerInPos(Cesium.Cartographic.fromCartesian(selectedLocation));
}, false);
function setMarkerInPos(positionCartographic){
//console.log (positionCartographic);
//viewer.pickTranslucentDepth = true;
//viewer.terrainProvider = Cesium.createWorldTerrain();
viewer.scene.globe.depthTestAgainstTerrain = true;
var redSphere = viewer.entities.add({
name: ‘Red sphere with black outline’,
position: Cesium.Cartesian3.fromRadians(positionCartographic.longitude, positionCartographic.latitude,10),
ellipsoid: {
radii: new Cesium.Cartesian3(1000, 1000, 1000),
material: Cesium.Color.RED.withAlpha(0.5),
outline: true,
outlineColor: Cesium.Color.BLACK,
//height: 200000.0,
heightReference: Cesium.HeightReference.RELATIVE_TO_GROUND,
//heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
//disableDepthTestDistance: Number.POSITIVE_INFINITY
},
});
}
The bug is somewhere in
Context.prototype.readPixels.
specifically this call is the one that returns very different values for “pixels” when “baseLayerPicker” is on vs. off
gl.readPixels(
x,
y,
width,
height,
PixelFormat$1.RGBA,
PixelDatatype$1.toWebGLConstant(pixelDatatype, this),
pixels
);
this is a WebGL call, and i’m not familiar with it. So looks like somehow baseLayerPicker is having an effect on the WebGL context.
James_B
September 7, 2021, 3:33pm
7
This looks like a regression to me. You should file an issue and include the sandcastle example from your initial post.
1 Like
Well I figured it out.
After creating “viewer”, add
viewer.scene.globe.depthTestAgainstTerrain=true;
1 Like
@poncho524
Welcome to the community I am so happy to see that you were able to resolve this issue yourself!
-Sam
1 Like