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