Polyline Intersection With Terrain in Cesium -


i using cesium, , trying detect polyline intersects terrain on earth. have polyline begins @ point in air , drawn towards earth @ angle.

right calculating end point using set distance, have start , endpoint. want detect polyline first hits earth's surface , stop drawing @ point. example, if there tall mountain, don't want line continue on other side of mountain.

i've tried few different approaches using intersectiontests, grazingaltitudelocation , rayellipsoid have not had luck. have been creating ray start , end points of polyline , using viewer.scene.globe.ellipsoid ellipsoid in functions. keep getting starting point returned intersection point.

does have idea doing wrong, or suggestions on different way this? appreciated.

edit: edited/added content

here code used, grazingaltitudelocation returns start point , rayellipsoid returns undefined.

var viewer = new cesium.viewer('cesiumcontainer'); var scene = viewer.scene; var globe = scene.globe; var ellipsoid = scene.globe.ellipsoid; var primitives = scene.primitives;  globe.depthtestagainstterrain = true;  var cesiumterrainprovidermeshes = new cesium.cesiumterrainprovider({url : '//cesiumjs.org/stk-terrain/tilesets/world/tiles'}); scene.terrainprovider = cesiumterrainprovidermeshes;  var startlon = -117.69; var startlat = 35.69; var startelv = 20000; var endlon = -120.0417; var endlat = 39.0917; var endelv = 0;  var startcart = cesium.cartographic.fromdegrees(startlon, startlat, startelv); var start = ellipsoid.cartographictocartesian(startcart);  var endcart = cesium.cartographic.fromdegrees(endlon, endlat, endelv); var end = ellipsoid.cartographictocartesian(endcart);  var ray = new cesium.ray(start, end);  var intersection = cesium.intersectiontests.grazingaltitudelocation(ray, ellipsoid);  var intersection2 = cesium.intersectiontests.rayellipsoid(ray, ellipsoid); var point = cesium.ray.getpoint(ray, intersection2.start); 

i think should picking on globe, not on ellipsoid. hope help:

function pickglobeintersection(viewer, p0, p1) {       //all positions in cartesian3       var direction = new cesium.cartesian3();       cesium.cartesian3.subtract(p1, p0, direction);       cesium.cartesian3.normalize(direction, direction);        var ray = new cesium.ray(p0, direction);       var hitpos = viewer.scene.globe.pick(ray, viewer.scene);        if ((hitpos !== undefined) && (hitpos !== null)) {         return hitpos;       } else {         return null;       } } 

regards


Comments

Popular posts from this blog

java - How to specify maven bin in eclipse maven plugin? -

single sign on - Logging into Plone site with credentials passed through HTTP -

php - Why does AJAX not process login form? -