Direct3D 10 या बाद में त्रिकोण प्रशंसकों का समर्थन क्यों नहीं किया जाता है?


16

जैसा कि प्रलेखन में कवर किया गया है, त्रिकोण प्रशंसक Direct3D 10 या बाद में समर्थित नहीं हैं

क्यों? क्या त्रिकोण प्रशंसकों के साथ काम करने में अंतर्निहित कमियां हैं?


5
मेरी समझ यह है कि क्योंकि त्रिकोण प्रशंसक अक्सर बहुत पतले लंबे त्रिकोणों में परिणत होते हैं, जिसके परिणामस्वरूप कलाकृतियों का निर्माण होता है। इसके अलावा, मुझे लगता है कि किसी भी कोशिश को रेंडर करने के लिए अलग-अलग ड्रॉ कॉल की जरूरत होती है, जो पंखे से नहीं जुड़ी होती हैं। जहां एक पट्टी के साथ अपने संभव के रूप में। मुझे नहीं लगता कि कुछ ऐसे प्रशंसक हैं जो स्ट्रिप्स बेहतर नहीं कर सकते।
ClassicThunder

3
प्रशंसकों को इंडेक्स का उपयोग करके जोड़ा जा सकता है, इसलिए अलग से कॉल की आवश्यकता नहीं है। वही स्ट्रिप्स पर भी लागू होता है (और आप स्ट्रिप्स के साथ प्रशंसकों को भी कनेक्ट कर सकते हैं) जो कि अधिक लचीला है, इसमें डाउनग्रेडेट ट्रिस की आवश्यकता नहीं होती है, और बैंडविड्थ के मामले में अधिक हल्के होते हैं।
मैक्सिमस मिनिमस

जवाबों:


15

एक दशक से भी अधिक समय से हार्डवेयर विक्रेता त्रिभुज स्ट्रिप्स, अनुक्रमित त्रिकोण सूचियों और अनुक्रमित त्रिकोण स्ट्रिप्स को सबसे तेज़ आदिम प्रकारों के रूप में उपयोग कर रहे हैं। क्यों? स्ट्रिप्स में बेहतर कैश लोकलिटी होती है (पिछले 2 वॉट्स को पुन: उपयोग करने के बजाए लगातार पहले जंप करने के लिए) और इंडेक्सिंग हार्डवेयर वर्टेक्स कैश को वास्तव में काम करने की अनुमति देता है, साथ ही डुप्लिकेट वर्ट्स को खत्म करने के लिए अधिक प्रभावी होता है।

यदि सभी हार्डवेयर विक्रेताओं का कहना है कि "इसे इस तरह से करें और आप तेज़ होने जा रहे हैं" तो बहुत अच्छा मौका है कि यदि आप इसे इस तरह से करते हैं तो आप वास्तव में तेज़ होंगे।

तो डी 3 डी 10 + सिर्फ इसे औपचारिक करता है; यदि वह तेज़ पथ है तो वह पथ जिसका आप उपयोग करने जा रहे हैं और अन्य पथ मौजूद नहीं होंगे। यह डी 3 डी 10 + के एक डिजाइन दर्शन के साथ है, जो आपको तेज पथ पर रखना है और आपको वहां रखना है।


4

मुझे नहीं पता कि यह वास्तव में विकास को कितना प्रभावित करता है लेकिन इस तरह के किसी भी बदलाव के साथ, यह बताया गया है कि वे चालक डेवलपर्स को बेहतर ड्राइवर लिखने देंगे। GPU ड्राइवरों की जटिलता अद्भुत है, लेकिन मुझे यकीन नहीं है कि यह सटीक परिवर्तन बहुत मदद करेगा।

या तो मामले में, अपनी अधिकांश आवश्यकताओं के लिए त्रिकोण प्रशंसकों को बदलना संभव है (जैसे उत्तल बहुभुज प्रतिपादन) स्ट्रिप्स के साथ, अक्सर बेहतर परिणाम के साथ।

// 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 ] );
}

EDIT: उल्लेख करना भूल गया - यदि आपको घुमावदार आदेश बदलने की आवश्यकता है - तो उस "यदि" (== से =!) में परीक्षण को उल्टा कर दें।


3

(यह विशेष सवाल एक राय का वारंट :)

विशेष रूप से, मैं इसकी वास्तुकला अंतरिक्ष यात्रीता कहूँगा। OpenGLES ने बहुत सारे सामान को 'कम जटिल' बनाने के लिए फेंक दिया, जबकि वास्तव में केवल प्रत्येक और प्रत्येक डेवलपर पर विरासत कोड के साथ जटिलता को आगे बढ़ा रहा है।

बेशक, यहां तक ​​कि जब हार्डवेयर मूल रूप से इसका समर्थन नहीं करता है, तो स्ट्रिप या त्रिकोण में परिवर्तित करके लोगों को त्रिकोण प्रशंसकों के अनुक्रमण के साथ संगतता प्रदान करना तुच्छ होगा।

WebGL रन-टाइम और ऐसे में हर समय मान्य बफ़र्स और इस तरह के ट्रैक का ध्यान रखना पड़ता है, और ड्राइवर आसानी से लोगों का प्रबंधन कर सकते हैं , बावजूद इसके वे इसका समर्थन नहीं करते।

तो FFP से पूरी तरह से बाहर फेंकने और इस तरह एक बड़ी झुंझलाहट IMO है।


10 या अधिक साल पहले यह एक अच्छा जवाब होता। आज, वर्टेक्स पाइपलाइन को लगभग हमेशा हार्डवेयर में लागू किया जाता है, और GPU मेमोरी में बफर ऑब्जेक्ट में स्टोर किए जाने वाले डेटा की अधिक संभावना होती है, इसलिए ड्राइवर में काल्पनिक फैन-टू-स्ट्रिप कार्यान्वयन को सीपीयू मेमोरी में वर्टेक्स डेटा को वापस खींचने की आवश्यकता होगी। पुन: व्यवस्थित करने के लिए, फिर इसे GPU मेमोरी में पुनः लोड करें। यह न केवल बफर ऑब्जेक्ट्स (क्योंकि अब आपके पास स्थिर वर्टेक्स डेटा है) का उपयोग करने के पूरे बिंदु को मिटा देता है, बल्कि इसके लिए GPU मेमोरी से रीडबैक की आवश्यकता होती है, इसलिए हेलो पाइपलाइन स्टॉल और कम प्रदर्शन।
मैक्सिमस मिनिमस

1
@ mh01 क्या हार्डवेयर मूल रूप से प्रशंसक का समर्थन नहीं करता है? HW सब के बाद पूर्ण ओपन के साथ काम करने के लिए है ...
विल

GPU मेमोरी में वर्टेक्स डेटा संग्रहीत किया जा सकता है , लेकिन इसे सिस्टम मेमोरी से किसी भी तरह से पहले स्थान पर (कम से कम एक बार) प्राप्त करना होगा। वह ड्राइवर के माध्यम से है। (डेटा को मानते हुए सीपीयू की उत्पत्ति हुई, जो, विशेष हार्डवेयर डेमो को छोड़कर, यह लगभग हमेशा करता है)।
BrainSlugs83
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.