如何使用Cesium投射射线并检测与点云的相交

时间:2019-04-17 13:23:15

标签: javascript raytracing point-clouds cesium

我目前正在研究一个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对象上,而不是在点云中的实际点上,这意味着它没有返回我实际需要的位置。

有人会知道实现此目标的不同方法或方式吗?

0 个答案:

没有答案