Belgelerde ele alındığı gibi, üçgen fanlar Direct3D 10 veya sonraki sürümlerde desteklenmemektedir .
Neden? Üçgen fanlarla çalışmanın doğal dezavantajları var mı?
Belgelerde ele alındığı gibi, üçgen fanlar Direct3D 10 veya sonraki sürümlerde desteklenmemektedir .
Neden? Üçgen fanlarla çalışmanın doğal dezavantajları var mı?
Yanıtlar:
On yıldan fazla bir süredir donanım satıcıları kullanmak için en hızlı ilkel tipler olarak üçgen şeritleri, endeksli üçgen listelerini ve endeksli üçgen şeritleri itmektedir. Neden? Şeritler daha iyi önbellek konumuna sahiptir (sürekli olarak birincisine geri dönmek zorunda kalmak yerine gönderilen son 2 verts'i yeniden kullanır) ve endeksleme donanım tepe önbelleklerinin gerçekten çalışmasına ve yinelenen verileri ortadan kaldırmak için daha etkili olmasına izin verir.
Tüm donanım satıcıları "bu şekilde yapın ve daha hızlı olacaksınız" diyorsa, bu şekilde yaparsanız aslında daha hızlı olma şansınız oldukça yüksektir.
D3D10 + bunu sadece resmileştirir; hızlı yol buysa, kullanacağınız yol budur ve diğer yollar mevcut olmaz. Bu, sizi hızlı yola sokmak ve sizi orada tutmak olan D3D10 + 'nın tasarım felsefelerinden biri ile uyumludur.
Bunun gelişimi gerçekten ne kadar etkilediğini bilmiyorum, ancak bu tür değişikliklerde olduğu gibi, sürücü geliştiricilerinin daha iyi sürücüler yazmasına izin verdikleri söylendi. GPU sürücülerinin karmaşıklığı şaşırtıcı ama bu kesin değişikliğin çok yardımcı olup olmayacağından emin değilim.
Her iki durumda da, ihtiyaçlarınızın çoğu için (dışbükey çokgen oluşturma gibi) üçgen fanları, genellikle daha iyi sonuçlarla şeritler ile değiştirmek mümkündür.
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
DÜZENLEME: söylemeyi unuttum - sargı sırasını değiştirmeniz gerekiyorsa - sadece testi bu "if" (== için! =) Ters.
(Bu özel soru görüş cevabını garanti eder :)
Öznel olarak, mimari astronotizm olduğunu söyleyebilirim. OpenGLES ayrıca 'daha az karmaşık' hale getirmek için birçok şey attı, bunun yerine karmaşıklığı eski kodla her geliştiriciye itti.
Tabii ki, donanım doğal olarak desteklemese bile, üçgen fanları sıralayan insanlarla şeritlere veya üçgenlere dönüştürerek uyumluluk sağlamak önemsiz olurdu.
WebGL çalışma süreleri ve bu türler, onaylanmış arabellekleri ve her zaman bunları takip etmek zorundadır ve sürücüler desteklememelerine rağmen hayranlarını gönderen kişileri kolayca yönetebilir.
Yani tüm FFP ve benzeri atma sadece büyük bir can sıkıcı IMO.