Как навести луч и обнаружить пересечение с точечным облаком с помощью цезия - PullRequest
1 голос
/ 17 апреля 2019

В настоящее время я работаю над проектом Cesium, который должен привести луч и найти точку, где он пересекается с Pointcloud (Cesium3DTileSet).

До сих пор я не смог найти методэто делает это.Мне удалось реализовать scene.pickFromRay и drillPickFromRay следующим образом:

//CameraPosition and CameraDirection: [x, y, z]
const { cameraPosition, cameraDirection } = cameraToWorldPoint(rotationQuaternion, translation, geoTransformationMatrix)

const ray = new Cesium.Ray(new Cesium.Cartesian3(cameraPosition[0], cameraPosition[1], cameraPosition[2]), new Cesium.Cartesian3(cameraDirection[0], cameraDirection[1], cameraDirection[2]));
const intersections = viewer.scene.drillPickFromRay(ray, undefined, undefined, 5);
//Always returns an array of one object (Cesium3dTileSet)

return { x: intersections[0].position.x, y: intersections[0].position.y, z: intersections[0].position.z }

Но пересечения из pickFromRay и drillPickFromRay, кажется, происходят со всем объектом CesiumTileSet, а не с фактическими точками в pointcloud, что означаетчто он не возвращает ту позицию, которая мне действительно нужна.

Кто-нибудь знает другой метод или способ достижения этого?

...