3d Max Görülemeyen Yüzeylerin Elenmesi - 3d Max Dersleri - örülemeyen Yüzeylerin Elenmesi
Bu dökümanı culling işlemlerine en basit seviyede giriş olarak görebilirsiniz.
Konular
-Giriş-
-BackFace Culling(Arka Yüzeylerin Elenmesi)
-Frustum Culling
-Sonuç
A-Giriş
Temel olarak yapmak istediğimiz şey ekranda gözükmeyek olan üçgenleri renderlememek ve collision detection and response tabii tutmamak. Bildiğiniz gibi renderlemek icin ücgenleri, transformation,lighting,reflection,shodowing vb birçok işlemden geçirmemiz gerekiyor, aynı işlemleri collision detection and response içinde geçerli.. Buda bize boşu boşuna işlem va zaman kaybına neden olmakta . Motorumuzu daha da hızlandırmak için motorumuza backface culling ve frustum culling kodlarını eklememiz gerecek
A-BackFace Culling
Arka yüzeylerin elenmesi işlemi oldukça basit.. Program ilk olarak çalışmaya başladığında sisteminizde göstereceginiz mesh ve geometrileri oluşturan üçgenlerin normalleri hesaplanmış olur ve sistemde saklanır.
Simdi elinizde yüzey normalleri olduğunu düşünürsek arka yüzey görünüp görünmediğini
P: Yuzey üzerindeki bir nokta
Eye: Kamera Pozisyonu
N: Yuzey Normali
If (face is backface) [( P-Eye) .N>0]
Harware olarak yapmak istiyorsanız Ben OpenGL kullandığım için OpenGL için
glCullFace(GL_BACK_FACE);
glEnable(GL_CULL_FACE);
B-Frustum Culling
Frustum Culling sizin görünmeyen üçgenleri/objeleri elemenizi sağlar. Bu konuyu ileride dahada ayrıntılı olarak anlatacagım. Çünkü Frustum Culling başarılı bir şekilde çalışabilmesi için Scene Graph sizin görüntü ağacınız ve nesnleri hiyarşik(BSP, Quatree, Octree) tutmanız ile yakından ilgili. Ben burada en basit şekliyle olayı size anlatmaya çalışacağim.Ayrıca bu konu alındır..
Kamera matrisiniz elinizde FOV 90 derece olan bir kamera için frustum culling'i gerçekleştireceğiz.
Göz orijini (0,0,0) frustum düzlemleri arasındaki açı 90 derece ( sol ve sag, üst ve alt düzlemler ) Sonra kontrol etmemiz gereken noktanın bu düzlemler içinde olup olmadığı.
(Burada dikey kısmın z ekseni, yatay ekseninde x ekseni oldugunu varsayın)
Kameranın her hareketinde devamlı olarak bu kontrolleri yapmanız gerek. Objelerinizi ve Kameranı hareket ettirip yine aynı hesaplamaları yapmanız gerekecek.