- 클라이언트(React/Vite): Video.js 플레이어, 하단 스테이션바, POI/구조물 영상 오버레이, 카메라 파라미터 보정, 미니맵/RoutePanel - 서버(Express): Range 스트리밍, HLS 변환, 프레임 추출, tus 업로드, 주석 API - 최근 작업: 스테이션바 종점역 표출/양끝 정렬/미도착(재생불가) 표시, POI 라벨 '구분' 우선·컴팩트 팝업·겹침제외 토글·동일좌표 다중행, 진행방향(상/하) 우선 표출, 커서 배지 크기·픽셀 떨림 개선 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
33 lines
1.6 KiB
Markdown
33 lines
1.6 KiB
Markdown
# 2026-06-23 — 드론 궤적 끊김 제거(연속 폴리라인)
|
||
|
||
**소요 시간**: 약 10분
|
||
**Context 사용량**: input ~165k / output ~19k tokens (추정)
|
||
|
||
---
|
||
|
||
## 요청
|
||
드론 궤적이 **끊겨(구슬처럼) 보임** → 부드럽게.
|
||
|
||
## 원인
|
||
- 기존: `segFrom`이 점 쌍마다 **조각 선분**을 만들고, RAF에서 조각마다 `moveTo`/`lineTo` → 각 조각이 별도 서브패스라 **연결부가 둥글게 안 이어짐**.
|
||
- 선이 가늘고(2px, α0.55) 노란 점(r3)이 도드라져 **점선/구슬**처럼 보였다.
|
||
|
||
## 해결 — `StationOverlay.tsx`
|
||
1. **데이터 일원화**: `RenderCache`에서 `dronePathSegs` 제거, **진행방향 순서 점 배열 `dronePathPts`** 만 유지. 빌드 루프는 카메라 앞쪽(`Zc>=CLIP_Z`) 점만 순서대로 수집(`continue`로 뒤쪽 제외, `MAX_FWD` break 유지). `STEP 5→3`(더 촘촘), `BACK 150→60`.
|
||
2. **RAF: 하나의 연속 폴리라인**으로 그림 — `moveTo(pts[0])` 후 전부 `lineTo`, `lineJoin/lineCap='round'`.
|
||
- 어두운 밑선(width5, 검정 α0.35·dpa) + 본선(width3, 하늘색 dpa) 2겹 → 배경 위에서도 끊김 없이 선명.
|
||
3. **점**: r3→**r1.8**, 4개마다 1개만 → 선 흐름 방해 없이 측정점 흔적만.
|
||
|
||
```ts
|
||
// 빌드: 앞쪽 점만 순서대로
|
||
for (let i=lo;i<=hi;i+=STEP){ const cc=...;
|
||
if((cc.fwd??0)>MAX_FWD) break;
|
||
if(cc.Zc<CLIP_Z) continue;
|
||
const p=pixelFromCamera(cc,params); dronePathPts.push([p.pxRaw,p.pyRaw]); }
|
||
// RAF: 연속선
|
||
ctx.lineJoin=ctx.lineCap='round';
|
||
ctx.beginPath(); ctx.moveTo(pts[0]); for(k=1..) ctx.lineTo(pts[k]); ctx.stroke();
|
||
```
|
||
|
||
빌드: `index-C3L5Fc0X.js` ✓
|