private _raycastObject3d()

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
	}