Eğlenmek için kendi oyun motorumu geliştiriyorum (ancak kar değil). Ben bir iş parçacığında render ve benim başka bir sahne grafik güncellemeleri (hız, vb.) Var. Oluşturma zamanı geldiğinde, oluşturma iş parçacığı görünür düğümleri yeni bir doğrusal arabelleğe ekler ve bunları geçer.
Daha ayrıntılı olarak, sahne grafiğim üç arabelleğe alınmış. Sahne grafiğimdeki her düğüm, göreceli ve mutlak dönüşüm matrislerinin üç kopyasına sahiptir (4x4). Herhangi bir zamanda, bir kopya sahne grafiği iş parçacığı tarafından yazılır, bir kopya oluşturucu tarafından okunur ve üçüncüsü okuyucu veya yazarın diğerini beklemeden diğerine geçebilmesi için bulunur. Bu, işlenirken bir şeye yazmayı ve yarı güncellenmiş bir sahne grafiği oluşturmayı önler. Her nasılsa kullanıcının güncelleme iş parçacığı ile çakışmayacak şekilde çalışması için her matrisin dördüncü bir kopyasını aldım. Bu, her zaman senkronize olmaktan kaçınarak iyi performans gösterir.
Ancak, bu bir karmaşa.
Bunlar benim sistem için nihai hedeflerim:
- Görüntü oluşturma ve sahne grafiği güncellemesi ayrı başlıklarda kalır.
- Bu iş parçacıklarının birbirlerini ne kadar beklemeleri gerektiğini en aza indirin.
- Güncelleme iş parçacığı tarafından yarı güncellenen bir sahne oluşturmayın. Bu özellikle fotoğraf makinesi hızlı hareket ediyorsa ve bazen de güncelleme öncesinde veya sonrasında görüntüleniyorsa fark edilir.
- Azaltılmış bellek kullanımı. Düğüm başına çok fazla matrisim var. Ayrıca matrisler ile kayan nokta kayması nedeniyle pozisyon / rotasyon / ölçek için vektörlere geçmeyi düşünüyorum.
- On binlerce Düğüm ile başa çıkabilme. Mevcut sistem bunu oldukça iyi yapıyor.
Ayrıca, bullet (fizik motoru) ve ağ oluşturmayı da dahil etmeyi umuyorum.
Daha iyi bir sahne grafiği elde etmek için bazı yaklaşımlar nelerdir?