Sahne grafiğine mi yoksa sahne grafiğine mi?


10

Oyunumda bir sahne grafiğinin uygulanıp uygulanmayacağına dair bir kararla uğraşıyorum. Böyle bir araç gerektiren bazı kullanım durumlarım var, ancak bazı uygulama ayrıntılarını alamadım.

Bazı arka plan: Mobil platform (öncelikle Android) hedef alan bir uzay shooter türü oyun yazıyorum ve benim kod neredeyse tamamen C ++. Herhangi bir ara katman yazılımı kullanmıyorum; render ve fizik motorları benim kendi yaratımlarım. Fizik motorum nesnelerin yerlerini kuvvetlere ve darbelere göre günceller. Henüz bir animasyon sistemim yok ama bir noktada (bu tartışma ile ilgisi olabilir veya olmayabilir) bu ziyaret edebilirsiniz.

İlk olarak, iyi bir kullanım durumunu açıklayacağım. Her biri bağımsız olarak hasar görebilen / yok edilebilen birkaç ayrı parçadan oluşan bir patronum olsun istiyorum. Örneğin, patron varlığının geri kalanından bağımsız olarak hasar alabilen bir kolu olan bir patronum olabilir. Kol yok edildiğinde, patronların omzuna yerleştirilen bir yangın parçacığı etkisi, kolun artık yok edildiğini gösterebilir.

Olduğu gibi, bu tür bileşik nesneleri bir arada tutmak için fizik motorumdaki kısıtlamalarla bu tür problemleri çözmeye karar verdim. Böyle bir kısıtlama 0 serbestlik derecesi sağlar ve esasen bir dönüşüm matrisidir. Bu gerçekten en başta beni aşağıda açıklanan sahne grafiklerinden çıkaran bir problemi atlatma girişimidir.

Bir sahne grafiğinin kullanımından uzaklaşmamın başlıca nedeni, hem fizik dünyasında hem de oluşturma sahnesinde iç içe geçmiş nesneleri (ebeveynlerinden bir dönüşümü devralan nesneler) tutmanın etkili bir yolunu bulamamıştım. Fizik dünyasının nesnelerin dünya uzayında (ya da en azından aynı alanda) olması gerekirken, oluşturma sahnesinde üst uzaydaki nesneler gerekir. Her iki alandaki konumları izlemek yardımcı olabilir (ve kaçınılmaz olabilir), ancak en az performansla ilgili olmayan kendi endişelerini ortaya çıkarır.

Bununla birlikte, yukarıda anlatılanlar gibi kullanım durumları göz önüne alındığında, bence ana alanda 'çalışabilmek' çok önemli hale gelecek ve fizik motorumu kısıtlamaları kullanarak bu ilişkileri sürdürmeye zorlamak sorunlu hale gelecektir.

Yukarıda açıklanan kullanım durumu ve tahmini göz önüne alındığında, dönüşümleri bir nesneden diğerine geçirmek için bir grafik yapısı kullanmalı mıyım? Öyleyse, fizik motorum nasıl yeni yerler hesaplamalı ve farklı alanlardaki nesneler için kavşak testleri yapmalıdır?

Yanıtlar:


11

Gerçekten hiyerarşik bir grafik denediniz ve performansı ölçtünüz mü?

Sorunu nasıl ele aldıklarını görmek için basit fizik motorlarını araştırdınız mı, nesneler arasında bağlantıya sahip bir 2D motor bile kanıtlanmış bir yönde size yardımcı olacaktır.

Fiziklerinizi birden fazla alanda çalıştırmaya çalışmazdım, karmaşıklık göz korkutucu olurdu. Dünya uzayında fiziği çalıştırın ve yerel uzay nesnelerini dünya uzayına ve geriye taşımak için hiyerarşinizin dönüşümlerini oluşturmak üzere işlevsellik ekleyin. Zorunluluklarınız zorunlu olarak üst nesneye göre yerel alanda olmalıdır.

Bir yan not olarak, saf bir nesne dizisi bile bir "sahne grafiği" dir, çok basittir. Verileri sorunları çözecek şekilde düzenlemekten korkmayın ve özellikle bu veri organizasyonunun performansının, bu performansı ölçmeden bile bir faktör olduğuna karar vermeyin.


Performanstan değil zamandan dolayı etrafta dolaşmaya çalıştım. Bağımsız olduğunuzda, uzun bir süre bir şeye takılmak ilerleme ve zihniyet için zararlı olabilir. Spring RTS motoruna biraz baktım ama aradığım şeyi bulamadım. Bu yüzden bir grafiğe gidersem, fizik motorunda yerel uzaydaki nesne konumlarını güncellemem, daha sonra dünya uzay yönünü hesaplamam ve çarpışma algılama ile kullanmak için ona asılmam gerekecek. Yine de "ve geri" den bahsediyorsunuz - bu ters matrisin hesaplanmasını gerektiriyor, değil mi? Bunu ne zaman yapmam gerekir?
notlesh

Zaman sorun olsaydı, bir fizik kütüphanesi kullanmanın daha hızlı olacağını, bir ton hata ayıklama zamanından tasarruf etmeyi düşündüm. Sadece 2D yapıyorsanız box2d.org belki? "Ve geri" yi önerdim çünkü tahmin ettiğiniz gibi bu sadece ters. Bir noktada muhtemelen dünya uzayında bir şey alıp buna ihtiyaç duyacak başka bir modele bağlamak isteyeceksiniz.
Patrick Hughes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.