Çoğunlukla Marching Cubes'ın CPU'dan OpenGL hesaplama shader'larına uygulanmasını başardım, ancak henüz normallerle mücadele etmedim ve bunun için en iyi yolu merak etmedim.
Benim uygulama özellikle ikili değer alanları ile ilgilenir (henüz bir mesafe tahmini olmayan 3D fraktal fonksiyonları modellemeye çalışıyorum), bu yüzden degrade ve ileri farklılıklar yöntemleri işe yaramaz. Çalışma köşelerini paylaştım ve CPU uygulamam, her komşu tepe noktasında yüz normalleri biriktirmek için burada açıklanan Quilez yöntemini kullanıyor .
Bu uygulamayı başka bir gölgelendiriciye taşıyabilirim, ancak bununla ilgili gördüğüm sorun, gereken çok sayıda atom. Atomikleri yalnızca skaler tamsayı tiplerinde kullanabileceğimiz ve 3 imzalı girişi 1'e toplanabilir şekilde paketlemenin bir yolunu düşünemediğim için, bu, 3 eksen * 3 köşe = gölgelendirici çağrısı başına 9 atomik ekleme anlamına gelir. Elbette bellek boyunca yayılacaklar, bu yüzden 9 kez tek bir atom sayacına vurmak gibi değil, ama yine de çok fazla cehennem gibi görünüyor.
Diğer alternatif, çokgen başına bir gölgelendirici çağırma çalıştırmak ve yüz normal listesini oluşturmak (muhtemelen x10y10z10'a bu şekilde paketlenebilir), daha sonra komşu yüzlerin tüm normallerini biriktirmek için köşe başına bir gölgelendirici kullanmaktır. Bu çok büyük bir hafıza domuzu olurdu, yüz endekslerinin depolama alanının en kötü durumla başa çıkmak için köşe başına 12 int'ye ihtiyacı olacaktır. Ayrıca, belirli bir tepe noktasına kaç yüzün zaten yazıldığını çözmek için tekrar atomiklere başvurmadan bu depoya nasıl yazılacağı sorunu da var.
Bunun nasıl yapılacağı hakkında daha iyi fikirleri olan var mı?