2011-09-09 13 views
5

एक्सएनए मधुमक्खी का घुटनों है लेकिन मैं अभी भी कस्टम सामग्री पाइपलाइनों के चारों ओर अपने सिर को लपेट नहीं सकता।एक्सएनए में कस्टम सामग्री पाइपलाइन, कैसे फैलाने वाले बनावट मैन्युअल रूप से सेट करें?

एमएसडीएन के सामान्य मानचित्र नमूने जैसे कुछ बुनियादी नमूने आपको दिखाते हैं कि एक .fbx फ़ाइल से अपारदर्शी डेटा से सामान्य नक्शा कुंजी को सामान्य सामान्य नक्शा बनावट को लोड करने के लिए कैसे निर्दिष्ट किया जाए। मुझे यह भी नहीं पता कि वे कैसे जानते हैं कि कुंजी का नाम क्या होना चाहिए, वास्तव में क्या अपारदर्शी डेटा है, अगर यह .fbx फ़ाइल में परिभाषित किया गया है या नहीं।

दिलचस्प बात यह है कि सामग्री पाइपलाइन में कोई कोड नहीं है जो कहता है कि कितने फैलाने वाले बनावट सेट हैं- ऐसा लगता है कि आप "बनावट" नामक एक छाया पैरामीटर का उपयोग करते हैं और वे स्वचालित रूप से सेट हो जाते हैं। लेकिन अगर मैं किसी और चीज के पैरामीटर का नाम बदलता हूं, तो मॉडल बिना बनावट के लोड होते हैं।

यह स्पष्ट रूप से फैलाने वाले बनावट को लोड करने के लिए कैसे जानता है, और उदाहरण के लिए, अलग-अलग नामित शेडर पैरामीटर के साथ पढ़ने के लिए फैलाने वाले बनावट कैसे लोड कर सकते हैं और यदि कोई अस्तित्व में नहीं है तो एक डिफ़ॉल्ट तटस्थ-सफेद बनावट फ़ाइल लोड करें?

उस मामले के लिए, सामग्री पाइपलाइन के साथ कस्टम लोड मॉडल सीखने के लिए "हैलो वर्ल्ड" उदाहरण है?

नोट, कि मैं प्रॉपर्टी विंडो में बनावट सेट करके .fbx मॉडलों में मौजूदा बनावट संदर्भों को ओवरराइड नहीं करना चाहता हूं।

उत्तर

3

समझने वाली पहली बात यह है कि एक्सएनए दो अलग-अलग कस्टम सामग्री पाइपलाइन वस्तुओं को बनाने की अनुमति देता है: एक एक आयातक है और दूसरा प्रोसेसर है।

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

एक प्रोसेसर वर्ग वस्तु द्वारा निर्दिष्ट लेता है:

http://create.msdn.com/en-US/education/catalog/sample/custom_model_importer

आप एक मॉडल की तुलना में किसी अन्य वस्तु की जरूरत है, एक कस्टम प्रोसेसर लिखें:

यहाँ एक कस्टम मॉडल आयातक का एक नमूना है आयातक और इसे एक और वर्ग में परिवर्तित करता है (क्योंकि आप इसे लिख रहे हैं, किसी भी वर्ग और किसी भी तरह से आप निर्दिष्ट करते हैं)। इस वर्ग का उपयोग .xnb फ़ाइल (XNA बाइनरी) उत्पन्न करने के लिए किया जाता है, जिसे आपके गेम द्वारा रनटाइम पर पढ़ा जाता है। इसलिए, यह सब केवल आपके गेम की सामग्री के बेहतर नियंत्रण देने के प्रयास में संकलन समय के दौरान चलाया जाता है।

यह एक अच्छा लिंक आरंभ करने के लिए है:

http://msdn.microsoft.com/en-us/library/bb447754(v=xnagamestudio.20).aspx

अपने मामले के लिए यह लगता है कि आप डिफ़ॉल्ट FBX आयातक के व्यवहार से नाखुश हैं। यदि ऐसा है, तो आपको शायद अपना खुद का लिखना होगा। आपको शायद अपने स्वयं के प्रोसेसर को लिखने की आवश्यकता नहीं है; मॉडलप्रोसेसर को डिफॉल्ट के रूप में निर्दिष्ट करें, जैसे कि मेरे पहले लिंक में प्रोजेक्ट किया गया है।

+0

इस उत्तर के लिए धन्यवाद। मैं वही बात सोच रहा था क्योंकि ऐसा लगता है कि मैं देख रहा था कि बहुत से उदाहरण केवल इतना ही कर रहे थे कि ऐसा लगता है कि यह आवश्यक होगा - अब मुझे पता है क्यों। इसने मुझे कुछ शोध समय बचाया। –

+0

मुझे लगता है कि इसका मतलब बेस क्लास के साथ बहुत परिचित होना है कि कस्टम आयातक/प्रोसेसर कक्षाएं बढ़ती हैं।मैंने पहले लिंक को देखा, वह उदाहरण सीधा है, खासकर जब से मैंने पहले ही ओबीजे आयातक को पहले लिखा था (अनुमान है कि एफबीएक्स प्रारूप चुनौती है)। मैंने इसे भी बेहतर किया ताकि यह किसी भी quads को त्रिकोण में परिवर्तित कर सके। –