Bölüm 11: Konumlandırılabilir Kamera
Işın izleyicimiz şu ana kadar sabit bir noktaya çakılıydı: Kameramız dünyada \((0, 0, 0)\) merkezindeydi ve sadece \(-Z\) eksenine doğru bakabiliyordu.
Gerçek bir film yönetmeni gibi davranabilmek için:
- Kamerayı sahnede istediğimiz noktaya taşıyabilmeli (lookfrom),
- İstediğimiz hedefe yöneltebilmeli (lookat),
- Kameranın başını dik veya yana eğik tutabilmeli (vup),
- Ve merceğimizi geniş açı veya dar telefoto yapabilmeliyiz (Field of View / FOV).
Kamera Görüş Geometrisi (Camera Viewing Geometry)
Görüş açısı (Field of View / FOV), kameranın dünyayı ne kadar geniş bir açıdan gördüğünü belirler. Genellikle dikey görüş açısı (vfov) derece cinsinden kullanılır:

Açı \(\theta\) olduğunda, \(1\) birim odak mesafesindeki görüş penceresinin (viewport) yarı yüksekliği trigonometrik tanjant ile hesaplanır:
Böylece toplam görüş penceresi yüksekliği \(2h\) olur.
Örneğin: - Eğer \(\theta = 90^\circ\) ise: \(h = \tan(45^\circ) = 1.0\), toplam yükseklik \(2.0\)'dır. - Eğer \(\theta = 20^\circ\) ise: \(h = \tan(10^\circ) \approx 0.176\), toplam yükseklik \(\approx 0.35\)'tir (muazzam bir yakınlaştırma / zoom etkisi).
Kamerayı Yönlendirmek: LookFrom, LookAt ve Vup
Kameramızın 3B uzaydaki konumunu ve yönünü tam olarak tanımlamak için üç parametre kullanırız:
1. lookfrom: Kameranın uzaydaki konumu (Göz nerededir?).
2. lookat: Kameranın baktığı hedef nokta (Nereye odaklandık?).
3. vup: Kameranın dikey ekseni (View Up - Başımızın baktığı üst yön; genellikle \((0, 1, 0)\)).

Bu üç parametreden, kameranın kendi yerel koordinat sistemini tanımlayan ortonormal taban vektörlerini (\(\mathbf{u}, \mathbf{v}, \mathbf{w}\)) çıkarırız:
- \(\mathbf{w}\) Eksen Vektörü: Kameranın baktığı yönün tam tersi (geriye doğru bakan birim vektör): $\(\mathbf{w} = \text{unit\_vector}(\text{lookfrom} - \text{lookat})\)$
- \(\mathbf{u}\) Eksen Vektörü: Kameranın sağına doğru bakan birim vektör (\(\mathbf{vup}\) ile \(\mathbf{w}\) vektörlerinin vektörel çarpımı): $\(\mathbf{u} = \text{unit\_vector}(\mathbf{vup} \times \mathbf{w})\)$
- \(\mathbf{v}\) Eksen Vektörü: Kameranın gerçek yerel yukarı vektörü (\(\mathbf{w}\) ile \(\mathbf{u}\) vektörlerinin vektörel çarpımı): $\(\mathbf{v} = \mathbf{w} \times \mathbf{u}\)$
Bu üç vektör birbirine \(90^\circ\) diktir ve kameramızın yerel uzayını oluşturur!
camera.h Sınıfının Güncellenmesi
Kamera sınıfımıza bu yeni özellikleri ekleyelim:
Sinematik Kamera Açıları
Artık kameramızı geriye ve yukarıya çekip dar açıyla baktırdığımızda:
| main.cc (Kamera Ayarı) | |
|---|---|
Render sonucumuz:

Kameranın konumu ve bakış açısı değiştikçe nesneler arasındaki perspektif ilişkisi ve derinlik hissi sinematik bir tabloya dönüştü!