Atölye › Wolfenstein Tarzı 3B Labirent › 11/18. adım
Şimdi sihir: görüş alanı 60 derece genişliğinde, 240 ışına bölünüyor; her 2 piksellik şerit için bir ışın. Her
ışının duvarı ufka ortalanmış bir sütun olarak çiziliyor; boyu PROJECTION / dist: iki kat uzak, yarı boy.
Çalıştır ve dön: labirentin içindesin!
```js
const FOV = Math.PI / 3 // 60 degrees
const RAYS = 240 // one ray for every 2 pixels across
const COLUMN = canvas.width / RAYS
// How far the screen is from the eye, in pixels, so that the view is exactly FOV wide.
const PROJECTION = canvas.width / 2 / Math.tan(FOV / 2)
for (let i = 0; i < RAYS; i++) {
const angle = player.angle - FOV / 2 + (FOV * (i + 0.5)) / RAYS
const hit = castRay(angle)
const dist = hit.dist
const h = Math.min(H * 3, PROJECTION / dist)
ctx.fillStyle = '#94a3b8'
ctx.fillRect(i * COLUMN, (H - h) / 2, COLUMN, h)
}
```FOV (görüş alanı) → 60°; RAYS → 240 ışın; COLUMN → her sütun 480 / 240 = 2 piksel.PROJECTION → ekranın gözden ne kadar uzakta olduğu (piksel). Görüşün tam 60° olması için gereken değer:
ekranın yarısı / tan(30°).angle → i. ışın görüşün sol kenarından (player.angle - FOV / 2) başlayıp sağa doğru, kendi sütununun ortasından
(i + 0.5) bakar.PROJECTION / dist → 1 kare yüksekliğindeki duvar dist uzakta bu kadar piksel görünür: perspektif.Math.min(H * 3, ...) → burnunun dibindeki duvar dev olmasın.(H - h) / 2 → sütunu ufka (ortaya) ortalar.MAP listesinin altına dört görüş sabitini ve yorumu yaz.draw'da zeminle mini harita arasına sütun döngüsünü ve bir boş satır yaz. Çalıştır.Beceriler: Canvas üzerine çizim, Hız ve yerçekimi
← Işın: duvara kadar yürü Balık gözü yok →