in packages/layers/marker/src/Marker.ts [672:714]
private _raycastObject3d(
object3d: IR.NodeLike,
polaris: PolarisGSI,
ndc: CoordV2
): PickInfo | undefined {
const node = object3d
if (!isRenderable(node)) return
const geom = node.geometry
if (!geom) return
if (geom.mode !== 'TRIANGLES') {
// ONLY support geometry mode 'TRIANGLES'
return
}
// check attr disposable
if (!geom.attributes.position || isDISPOSED(geom.attributes.position.array)) {
return
}
if (geom.indices && isDISPOSED(geom.indices.array)) {
return
}
const result = polaris.raycastRenderableNode(node, ndc, {
allInters: false,
})
if (result.hit && result.intersections && result.intersections.length > 0) {
// object3d has been picked
const inter0 = result.intersections[0]
return {
distance: inter0.distance as number,
point: inter0.point as { x: number; y: number; z: number },
pointLocal: inter0.pointLocal as { x: number; y: number; z: number },
object: this,
index: 0,
data: undefined,
}
}
return
}