Holodepth • Bilim temelleri • Matematik
Sahnenin hesabı
Bir 3D sahnede “nesne orada” demek, aslında bir hesap sonucudur. Bu sayfa Three.js API sözlüğü değildir; sahneyi ayakta tutan matematiğin nokta, vektör, dönüşüm, matris, açı ve bileşke açıklayıcı haritasıdır. Three.js bu hesabı senin yerine paketler; ama paketlenen şey yine matematikseldir.
Amaç: kütüphane çağrılarının arkasında hangi kavramın durduğunu net görmek; böylece bug “API ezberi” değil, “yanlış uzay / yanlış sıra / yanlış birim” olarak okunur.
Okuma sözleşmesi: burada matematik sahne dilinde anlatılır. Bu sayfa API laboratuvarlarıyla çakışmaz; onlara neden ihtiyaç duyduğunu kurar. Derin uygulama için: Vektör mantığı, Matris nedir?, MVP zinciri.
Canlı demo: Transform Ledger
Sol üstte local matrix (çocuğun kendi defteri), sağda world matrix (sahneye yazılan sonuç). Üst çerçeveyi döndürdüğünde local sayılar aynı kalabilir; world değişir. Bu tek görüntü, aşağıdaki tüm bölümlerin özetidir: matematik, “yerel tanım”ı “ortak uzayda konum”a çevirir.
Bilim · Matematik · CANLI
Parent halka + eksen · child holo kristal + local eksen · local vs world defteri
Parent dönüşü world matrisini değiştirir; local değerler aynı kalabilir.
Uzay ve nokta: “nerede?” sorusu
Üç boyutlu sahne, matematikte çoğu zaman ℝ³ ile modellenir: her nokta üç gerçek sayıyla (x, y, z) verilir. Bu üçlü tek başına “nesne” değildir; yalnızca bir konum örneğidir. Sahne grafiğindeki bir mesh, yüzlerce / binlerce böyle noktadan (vertex) oluşur; ama “mesh burada” dediğimizde genellikle o kümenin bir referans noktasına çoğu zaman orijinine / pivot’una işaret ederiz.
Orijin ve eksen seçimi
Sayılar ancak bir orijin ve eksen yönleri seçildikten sonra anlamlıdır. Aynı fiziksel köşe, “dünya orijinine göre” (2, 0, −1) iken “araba kabinine göre” (0.1, 0.4, 0.0) olabilir. Matematik burada iki şeyi ayırır: değer ile çerçeve. Three.js’te bu çerçeveler local / world / view gibi isimlerle yaşar; ama kök fikir lineer cebirden gelir, kütüphaneden değil.
Sahne sezgisi
“Koordinat hatası” çoğu zaman yanlış sayı yazmak değil; doğru sayıyı yanlış çerçevede yorumlamaktır. Ledger demosunda parent dönerken local X sabit kalıp world’ün değişmesi tam budur.
Koordinat çerçevelerinin görsel turu için: Koordinat sistemleri. Bu bölümün katkısı: çerçeve seçiminin matematiksel zorunluluk olduğunu hatırlatmak.
Vektör: konum farkı, yön ve uzunluk
Nokta “bir yer”dir; vektör “bir yerden bir yere” veya “bir yönde bir şiddet”tir. Matematikte vektör v ∈ ℝ³ yine üç sayı taşır, ama yorumu farklıdır: orijine bağlı bir nokta değil, taşınabilir bir ok olarak düşünülür. Sahnede hız, yer değiştirme, ışık yönü, yüzey normali hep bu yorumla gelir.
Konum vektörü ile yön vektörü
İki nokta A ve B verildiğinde yer değiştirme d = B − A bir vektördür. Uzunluğu ‖d‖ = √(dx² + dy² + dz²) mesafedir. Yönü koruyup uzunluğu 1 yapmak (normalize) û = d / ‖d‖ “birim yön” üretir. Bu işlem Three.js’e özgü değildir; her 3D motor aynı tanımı kullanır.
Dot ve cross: açı ile diklik
İki birim vektörün skaler çarpımı a · b = cos θ açıyı verir. 0 dik, 1 aynı yön, −1 zıt demektir. Vektörel çarpım a × b ise her ikisine de dik bir üçüncü yön üretir (sağ el kuralı). Sahnede bunlar “ışık–yüzey açısı”, “bakış yönü”, “teğet düzlem” gibi yerlerde görünür henüz materyal yazmadan önce, saf geometrik/matematiksel ilişkiler olarak.
- Toplama a + b: iki yer değiştirmenin bileşkesi (paralelkenar kuralı).
- Skaler çarpma k·a: yön aynı, şiddet ölçeklenir (hızın artması gibi).
- Normalize: “ne kadar?” bilgisini atıp “hangi yön?” bilgisini bırakır.
Uygulamalı vektör sahnesi: Vektör mantığı. Buradaki metin, o demoya girmeden önce kavramları dilde sabitlemek içindir.
Dönüşüm: uzayı yeniden etiketlemek
Dönüşüm (transform), bir noktayı başka bir noktaya götüren kuraldır: p′ = T(p). Bunu “nesneyi hareket ettirmek” gibi düşünmek doğaldır; matematikte daha doğru okuma şudur: aynı şeklin noktalarına yeni etiketler (koordinatlar) vermek. Masa yerinde kalır, sen cetveli kaydırırsın ya da cetvel yerinde kalır, masayı kaydırırsın; iki dil aynı hesabı anlatır.
3D sahnede en sık kullanılan üç yapı taşı öteleme, döndürme ve ölçeklemedir. Üçü de “uzayı yeniden etiketler”; ama her biri farklı bir soruya cevap verir.
Öteleme (translation): “nereye kaydırayım?”
Öteleme her noktaya aynı vektörü ekler: p′ = p + t. Küpün her köşesine (2, 0, 0) eklersen küp bozulmadan sağa kayar. Kenar uzunlukları, açılar, “küp gibi görünme” aynı kalır; değişen yalnızca konumudur.
Sahne dilinde bu, “objeyi oraya koy” demektir. Öteleme tek başına şekli bilmez; sadece noktaların ortak kaymasını bilir. Bu yüzden bir mesh’i sağa çekmek ile kamerayı sola çekmek, çoğu zaman aynı matematiksel kaymanın iki yorumudur hangisini hareket ettirdiğin çerçeveye bağlıdır.
Küçük örnek
Nokta p = (1, 2, 0), öteleme t = (3, −1, 0) ise p′ = (4, 1, 0). Aynı t tüm köşelere uygulanırsa bütün şekil kayar; aralarındaki mesafe değişmez.
Döndürme (rotation): “hangi yöne baksın?”
Döndürme, seçilen bir eksen etrafında noktaları bir açı kadar çevirir. Uzunlukları ve aralarındaki açıları korur (izometrinin bir parçası): bir birim küp döndükten sonra hâlâ birim küptür; yalnızca oryantasyonu değişir. Üç temel eksen için yazılır: Rx(θ), Ry(θ), Rz(θ) sırasıyla X, Y, Z etrafında θ kadar.
Kritik nokta: döndürme varsayılan olarak hangi orijin etrafında? sorusuna bağlıdır. Matematikte sıkça “orijin etrafında” döndürülür; sahnede ise nesnenin kendi pivot’u (local orijin) etrafında döndürmek istersin. Önce ötleyip sonra orijin etrafında döndürmek, “kendi etrafında dönmek”ten farklı bir yörünge çizer bu yüzden sıra bölümü önemlidir.
Açı birimi radyan olmalıdır (bir sonraki bölümde). θ = π/2 çeyrek turdur; 90 yazıp radyan bekleyen bir fonksiyona vermek, “neredeyse dik” değil, “birçok tur” anlamına gelebilir.
Ölçekleme (scale): “ne kadar büyük?”
Ölçekleme, noktaları eksenler boyunca çarpar: p′ = (sx·x, sy·y, sz·z). Üç çarpan eşitse (uniform) şekil korunur; sadece boyut değişir birim küp iki katına çıkar ama hâlâ küptür. Çarpanlar farklıysa (non-uniform) “ezme / uzatma” oluşur: küp dikdörtgenler prizmasına dönüşebilir.
Ölçekleme de orijine göre tanımlanır: orijinden uzak noktalar daha çok kayar. Bu yüzden “önce ölçekle, sonra kaydır” ile “önce kaydır, sonra ölçekle” aynı sonucu vermez. Sahne grafiklerinin TRS sözleşmesi tam da bu belirsizliği kapatmak içindir.
TRS ve sıra neden önemli?
Bu üç işlem genelde değişmeli değildir. Somut düşün: bir ok işaretini önce 90° döndürüp sonra +2 birim X’e ötmek, önce +2 X’e ötüp sonra 90° döndürmekten farklı bir dünya konumu üretir ikinci durumda ok, orijin etrafında yay çizer.
Sahne motorları bu yüzden sabit bir sözleşme seçer. Three.js’te local matris
tipik olarak şu sırayla kurulur: önce scale, sonra
rotation, sonra position (öteleme).
Sen
position / rotation / scale
alanlarını ayrı ayrı yazsan bile, birleşik hesap bu sözleşmeye uyar.
“Neden ters döndü / yanlış yerde?” şikâyetinin büyük kısmı, bu sırayı
zihinde ters okumaktan gelir API’den değil, çarpım sırasından.
Matematiksel kök
Lineer cebirde döndürme ve (orijin merkezli) ölçekleme lineer dönüşümlerdir: orijini orijine götürürler ve T(αu + βv) = αT(u) + βT(v) kuralına uyarlar. Salt öteleme lineer değildir (orijini kaydırır). Homojen koordinatlar (bir sonraki bölüm) ötelemeyi de matris çarpımına dahil ederek üçünü tek dilde birleştirir GPU’nun sevdiği 4×4 paket tam budur.
Ledger demosunda Local X / Yaw / Scale kaydırıcıları bu üç yapı taşını ayrı ayrı yoklar; parent dönerken world defterinin değişmesi ise “üst dönüşüm × yerel dönüşüm” bileşkesinin canlı kanıtıdır.
Homojen koordinat ve 4×4 matris
Üç boyutlu bir noktayı (x, y, z, 1) olarak yazmak (homojen koordinat), ötelemeyi de bir matris–vektör çarpımı gibi ifade etmeye izin verir. Sonuçta her affine dönüşüm tek bir 4×4 matrisle kodlanır. Bu, GPU’nun sevdiği dil olduğu kadar, sahne grafiğinin “üst düğüm × alt düğüm” bileşkesini de tek işlem tipine indirger.
Üst düğüm varsa bileşke:
Mworld = Mparent · Mlocal
(Sütun-vektör geleneğinde; satır-vektör geleneğinde sıra ters yazılır. Three.js / WebGL sütun-vektör tarafındadır.) Ledger demosundaki iki defter tam olarak Mlocal ile Mworld ’dür: biri çocuğun kendi hesabı, diğeri zincirin sonucu.
Matris ne taşır?
Kabaca: üst-sol 3×3 blok döndürme + ölçek bilgisini; son sütunun ilk üç elemanı öteleme bilgisini taşır (sütun-vektör geleneğinde). Quaternion, aynı döndürmeyi dört sayıyla daha numerik-stabil temsil eder; Euler açıları ise üç açıya böler ama gimbal lock riski taşır. Bunların API detayı Object3D / matris sayfalarındadır; burada önemli olan: hepsi aynı matematiksel işi uzayı yeniden etiketlemeyi farklı paketlerde taşır.
Derin matris okuması: Matris nedir? · Model–View–Projection.
Açı, radyan ve döngüsel hareket
Dönme ve periyodik hareket, trigonometrinin sahne yüzüdür. Birim çemberde x = cos θ, y = sin θ bir noktanın açıya göre konumunu verir. 3D’de aynı fikir bir eksen etrafında yörünge, sallanma veya “nefes alan” ölçek için kullanılır: s(t) = s₀ + a·sin(ωt).
Derece vs radyan
İnsan dili çoğu zaman derece konuşur (90°); matematik ve GPU API’leri radyan konuşur (π/2). Dönüşüm: θrad = θdeg · π / 180. Ledger’daki yaw kaydırıcısı radyan cinsindendir; bu bilinçli bir birim seçimidir. “Neden 90 yazdım da dik dönmedi?” sorusunun cevabı çoğu zaman buradadır.
Periyot ve frekans
ω (açısal frekans) zamanı açıya bağlar. T = 2π / ω bir tam tur süresidir. Animasyonda “daha hızlı dönsün” demek çoğu kez ω artırmaktır; FPS’ten bağımsız olsun diye açı güncellemesi θ ← θ + ω·Δt biçiminde yazılır. Bu, fizik entegrasyonundan farklıdır: burada kuvvet yoktur, yalnızca parametrik bir eğri vardır.
Enterpolasyon: iki durum arası
Lineer enterpolasyon (lerp) lerp(a, b, t) = (1−t)·a + t·b iki skaler / vektör arasında t ∈ [0,1] ile kaydırır. t = 0 baş, t = 1 bitiştir. Konum için doğrudandır; döndürme için düz lerp yönü bozabilir bu yüzden yönler için slerp (küresel lerp) tercih edilir. Easing ise t ’yi zamanın doğrusal olmayan bir fonksiyonuyla değiştirerek hareketin “karakterini” üretir (yavaş başla, hızlı bitir vb.).
Sahne matematiği açısından enterpolasyon, “hedefe her karede biraz yaklaş” politikasının dilidir; fizikteki kuvvet birikiminden ayrı bir araçtır. Uygulamalı izlek: Lerp & easing.
Sahne hesabının üç katmanı
Yukarıdaki kavramlar sahnede üç pratik kata oturur. Matematik hepsinde vardır; ama her katın sorusu farklıdır.
Katman sözlüğü
| Katman | Matematiksel soru | Tipik yüzey | Derin sayfa |
|---|---|---|---|
| Yerel yerleştirme | Bu nesnenin kendi çerçevesinde T nedir? | position / rotation / scale |
Object3D |
| Hiyerarşi bileşkesi | Üst çerçevelerle Mworld nedir? | matrixWorld |
Matris |
| Kamera → ekran | Dünya noktası pikselle nasıl eşleşir? | view · projection (MVP) | MVP |
Materyal, ışık, fizik motoru veya buffer geometri bu üç katın yerine geçmez; yanına eklenir. Obje “duruyorsa” en azından ilk iki kat tamamlanmış demektir.
Sık karışan noktalar
- “Matematik = fizik.” Hayır. Yerçekimi olmadan da matris hesabı objeyi yerinde tutar. Fizik, zamanla değişen bir entegrasyon katmanıdır Sahnenin dinamiği.
- “Matematik = geometri.” Hayır. Vertex konumları şekli tanımlar; transform o şekli sahneye taşır Sahnenin şekli.
- “Quaternion sihir.” Hayır. Quaternion, döndürmeyi dört bileşenle temsil eden bir cebirdir; işi hâlâ p ↦ R(p) dönüşümüdür. Gimbal lock’tan kaçınmak pratik bir nedendir, mistik bir özellik değil.
- “World her zaman local’dir.” Yalnızca üst düğüm kimlik dönüşümüyse. Parent hareket ediyorsa world değişir; Ledger bunu canlı gösterir.