diff --git a/public/js/ar/detect.js b/public/js/ar/detect.js index 27998d6..3ab7bd5 100644 --- a/public/js/ar/detect.js +++ b/public/js/ar/detect.js @@ -5,10 +5,19 @@ export function createDetector() { return new AR.Detector({ dictionaryName: 'ARUCO_4X4_1000', maxHammingDistance: 0 }); } +/* Returns the markers usable for solving: present in the scene, sane geometry. + * The returned array also carries diagnostics so the HUD can distinguish + * "nothing detected" from "detected but not in the scene" — the latter looks + * identical on screen but means the scene never loaded, or the crest belongs to + * a different layout. knownIds may be null/empty; then nothing is solvable and + * rawIds tells you what the camera actually saw. + */ export function detectMarkers(detector, imageData, knownIds) { - const markers = detector.detect(imageData); - // keep only markers that exist in the scene, with sane geometry - return markers.filter(m => knownIds.has(m.id) && quadArea(m.corners) > 100); + const raw = detector.detect(imageData).filter(m => quadArea(m.corners) > 100); + const usable = (knownIds && knownIds.size) ? raw.filter(m => knownIds.has(m.id)) : []; + usable.rawCount = raw.length; + usable.rawIds = raw.map(m => m.id); + return usable; } export function quadArea(c) {