Как создать луч и обнаружить пересечение с облаком точек с помощью Cesium

#javascript #raytracing #point-clouds #cesium

#javascript #трассировка лучей #облака точек #cesium

Вопрос:

В настоящее время я работаю над проектом Cesium, который должен отбросить луч и найти точку, в которой он пересекается с облаком точек (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, а не с фактическими точками в облаке точек, что означает, что он не возвращает позицию, которая мне действительно нужна.

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

Комментарии:

1. Было бы неплохо, если бы вы могли поделиться некоторыми из своего собственного кода

2. Спасибо, Лука, добавил туда часть кода.

3. Шансы попасть в одну точку, используя прямую линию, математически близки к нулю, не так ли?