OpenGL'de tek bir draw çağrısı ile çok fazla parçalanmış geometri parçasını render etmek için iyi bir yaklaşımı kavramsallaştırıyorum ve karşı karşıya olduğum duvar her parçanın farklı bir dönüşüme ve belki de rotasyona sahip olması için bunu yapmanın en iyi yoludur Çünkü tek nesne çekimleri arasında model görünümü güncellemesini güncelleme lüksüne sahip değilsiniz. Burada ve başka yerlerde birkaç soru okudum ve insanların işaret ettiği yönleri oldukça farklı görünüyor. Bunu yapmanın ana yöntemlerini listelemek ve en yaygın ya da önerilen neyin yalıtıldığını denemek güzel olurdu. gölgelendiricideki matris dönüşümleri oluşturmaFarklı dönüşümlerle toplu çizim nesneleri için en iyi uygulama nedir?
: [gerçekten burada geçerli değildir olarak Instancing ait kaldırılan söz değiştir]
: İşte kabul ettik fikirler. Burada özniteliklerin bir parçası olarak bir çeviri vektörü veya bir dönüş açısı veya kuaternion gönderirim. Avantaj, mobil dahil olmak üzere çapraz platform çalışacak. Ancak, bir nesnede, her bir öznitelik için aynı dönüşüm verisini bir öznitelik olarak göndermek biraz israf gibi görünüyor. Görüntülemeden, bu benzer vektörleri veya skalerleri, tek bir nesne için, VBO'da, aralıklı dizinin bir parçası olarak birçok kez tekrarlamak zorundayım, değil mi? Diğer dezavantaj matematik yapmak için shader'a güveniyorum; Bunun bilge olup olmadığını bilmiyorum.
1) gibi, ancak matris hesaplamaları yapmak için gölgelendiriciye güvenmek yerine, bunun yerine istemci tarafında bunu gerçekleştiririm, ancak yine de VBO'da 16 yüzer akış olarak son model görünüm matrisini gönderirim. Ancak, anlayabildiğim kadarıyla, VBO'daki her bir köşe için bu özlü akışı tekrarlamak zorundayım, değil mi? Sadece savurgan görünüyor. Yukarıdaki 2) 'lik tradeoff, vertex başına VBO'ya daha fazla veri gönderiyorum (çeviri için 3-float vektöründen ziyade 16 float ve belki de 4 float quaternion), fakat shader'ın daha az iş yapmasını gerektiriyor. Yukarıdaki tüm sınırlamaları atlayın ve bunun yerine her bir nesne için ayrı bir çizim çağrısı ile ödün vermeyin. Bu, okuduğum kitaplarda tipik olarak "öğretilir", basitlik uğruna hiç şüphesiz.
Bunlardan başka yaygın yöntemler var mı?
Akademik bir soru olarak, yukarıdakilerin hepsinin uygulanabilir ve "kabul edilebilir" olup olmadıklarını merak ediyorum ya da bunlardan biri açıkça diğerlerinin üzerinde bir kazanan mı? Eğer münhasıran masaüstü GL'yi kullanacak olsaydım, bunu başarmanın birincil yolunu muhakeme ediyor?
İyi soru, bu çeşitli tekniklerin çeşitli artıları ve eksileri hakkında bir tartışma görmek isterim. –
Bu, çok çeşitli donanım platformlarında makul ve doğru önerilerde bulunmak için çok donanıma sahip bir donanımdır. Sadece instancing kullanmak uygun olduğunda bile bir tartışma belirli donanım. Temelde bir aylık bir araştırma projesi hakkında konuşuyorsun. –
@NicolBolas tamam .... öyleyse, instancing hakkında bir tartışmayı çıkardığımızı varsayalım; Diğer tekniklerle ilgili bir tartışmanın bir anlamı yok mu? İnsanlar, VBO'lar ve shader'lar ile her türlü şeyi dener, kesinlikle neyin farkında olunması gerektiği hakkında bazı genel fikirler vardır, ya da bu önerilerin bazılarının neden iyi olmadığının nedenleri, vb. – johnbakers