IVSD camera simulator · implementation observation
IVSD Camera FOV:目前實作觀察
IVSD 並沒有用同一個 FOV 角度同時解決預覽與偵測範圍。Ideal FOV 服務 Three.js 中間預覽;Edge-Ray 是可與型錄對照的角度診斷;地面偵測多邊形由 WASM calcFov3D 直接產生。
文件狀態:本頁依目前取得的 IVSD Portal、校正資料與 WASM 呼叫流程整理,屬於實作觀察;正式整合介面、演算法保證與輸出語意仍待 IVSD 團隊確認。
Ideal FOV:Three.js 預覽
buildDisplacementMap 回傳與 map 同源的 P′,前端優先使用 idealFovx / idealFovy。這個視角讓理想中間相機與 displacement map 對齊。
idealFovx = 2 × atan(W / (2fx′)) × 180/π
idealFovy = 2 × atan(H / (2fy′)) × 180/π
Three.camera.fov = idealFovy
Three.camera.aspect = W/H
Edge-Ray FOV:型錄對照診斷
取出圖左右與上下邊緣中點,以 K/D 反投影成相機座標的單位光線,再計算兩光線夾角。
left=(0,H/2) · right=(W−1,H/2)
top=(W/2,0) · bottom=(W/2,H−1)
fovH = acos(clamp(rayL·rayR,−1,1)) × 180/π
fovV = acos(clamp(rayT·rayB,−1,1)) × 180/π
目前狀態:Edge-Ray 已計算並出現在 debug report,但沒有 UI consumer;它不得寫入 camera.fov。
WASM 偵測管線:不從 camera.fov 推梯形
成像預覽管線
- Intrinsics →
buildDisplacementMap - P′ →
idealFovy → Three.js projection - Displacement map 負責 K/D/LDC 畸變外觀
地面偵測管線
- 型號、高度、tilt、zoomStep、LDC、corridor 等組成 request
- WASM
calcFov3D 執行 native CLI path - 直接回傳六類 grid/FOV 頂點,JS 只轉座標與裁牆
不可混用:改變 Three.js camera.fov 只會改變預覽張角,不會重算 Human、Vehicle 等地面多邊形。
Zoom 與 LDC 在 IVSD 的位置
zoomStep
是離散變焦階編號,用來選擇對應校正狀態,並傳入 displacement 與 calcFov3D 管線;不是 VPP 的連續 focalLength(mm)。
LDC
預覽管線會載入對應校正與 remap 資料;偵測管線也把 useLdc 傳入 WASM。型號是否開放 LDC,以 intrinsics_ldc.yml 是否存在為主要判定。