카메라를 켜두면 스윙의 모션 급증을 감지해 임팩트 시점을 자동으로 잡고, 그 직후부터 프레임마다 공을 찾아 궤적을 쌓습니다. 공을 놓치면 거기서 멈추고 바로 피팅합니다.
프레임을 통째로 버퍼에 쌓지 않습니다. 직전 한 장만 들고 차분을 돌려 좌표만 남기므로 메모리는 일정합니다. 시간은 requestVideoFrameCallback의 mediaTime을 쓰기 때문에 fps를 추측할 필요가 없습니다.
밝을수록 잘 됩니다. 브라우저는 셔터 속도를 제어할 수 없어 노출이 자동입니다. 어두우면 셔터가 느려지고 공이 선으로 번져 검출이 실패합니다. 실내 타석에서 안 되면 그건 버그가 아니라 한계입니다 — 카메라 진단 탭에서 실제 승인된 fps를 확인하세요.
카메라를 시작하고, 머리·발·어드레스 공 세 점을 찍은 뒤 대기 상태로 두세요.
화각은 기기·줌마다 다릅니다. 진단 탭에서 측정된 값이 있으면 자동으로 채워집니다.
샘플 궤적으로 파이프라인 전체가 돌아간 상태입니다.
카메라 높이와 공까지 거리는 입력값이 아니라 키에서 유도됩니다.
Cl = 0.444·S0.421, Cd = 0.211 + 0.281·S (S = ωR/v).
카메라는 스핀을 못 봅니다. 연습장 야드 표지판처럼 실제 캐리를 아는 샷이 하나 있으면 그 클럽의 스핀을 거꾸로 풀 수 있습니다.
각 오차 원인을 하나씩 넣고 전체 파이프라인을 다시 돌린 결과입니다. 스핀 가정이 나머지 전부를 합친 것보다 큽니다.
앱들이 "궤적을 길게 찍으라"고 하는 건 피팅 조건수 때문이 아니라 검출 신뢰도 때문입니다.
실시간 촬영은 보통 1080p입니다. 이 표가 실시간 모드의 관측 창이 왜 첫 0.4초뿐인지를 설명합니다.
브라우저마다·기기마다 카메라 성능이 다릅니다. 여기서 실제로 승인된 값을 측정합니다. 요청한 값이 아니라 받은 값입니다.
프레임레이트 — 30이면 첫 0.4초에 12프레임입니다. 피팅에는 충분하지만 검출 여유가 없습니다. 60 이상이면 편합니다. 아이폰 사파리는 슬로모(240fps)를 웹에 내주지 않습니다.
노출 제어 — exposureTime이 지원이면 셔터를 짧게 잡아 공의 번짐을 없앨 수 있습니다. iOS 사파리는 거의 항상 미지원이고, 그러면 밝은 야외에서만 실용적입니다.
보안 컨텍스트 — HTTPS가 아니면 카메라 자체가 열리지 않습니다. Cloudflare Pages는 항상 HTTPS입니다.
iframe — 삽입된 페이지 안이면 권한이 막힐 수 있습니다. 직접 배포한 도메인에서는 해당 없음으로 나와야 합니다.