में एकाधिक वर्टेक्स बफर का उपयोग करना मेरे पास एक सी ++ डायरेक्टएक्स 11 रेंडरर है जिसे मैं लिख रहा हूं।डीएक्स 10/डीएक्स 11
मैंने कंकाल एनिमेशन को समर्थन देने के लिए COLLADA डेटा आयात करने के लिए एक COLLADA 1.4.1 लोडर लिखा है।
मैं इस बिंदु पर लोडर को मान्य कर रहा हूं (और मैंने पहले एक अन्य प्रस्तुतकर्ता में COLLADA का समर्थन किया है जिसे मैंने पहले विभिन्न तकनीक का उपयोग करके लिखा है) और मैं डीएलएक्स 10/11 के साथ कोलाडा से मेल खाने वाली समस्या में भाग रहा हूं।
अनोखा शीर्ष पदों में से एक शीर्ष बफर:
मैं डेटा के 3 अलग शिखर बफ़र्स की है। अद्वितीय मानदंडों का एक वर्टेक्स बफर। अद्वितीय बनावट निर्देशांक का एक वर्टेक्स बफर।
ये शिखर बफ़र्स अलग सरणी लंबाई होते हैं (पदों 2910 तत्व है, Normals 9000 से भी अधिक है, और बनावट निर्देशांक मोटे तौर पर 3200 के है)
कोलाडा एक त्रिकोण सूची जो मुझे इन सरणियों में से प्रत्येक में सूचकांक देता है प्रदान करता है एक दिए गए त्रिभुज के लिए (वर्बोज़ और विचित्र रूप से पहले किया जाता है, लेकिन आखिरकार यह आपके साथ काम करने के बाद सरल हो जाता है।)
यह जानकर कि डीएक्स 10/11 एकाधिक वर्टेक्स बफर का समर्थन करता है मुझे लगा कि मैं डीएक्स 10/11 इंडेक्स भर रहा हूं इन बफरों में से प्रत्येक में सूचकांक के साथ बफर * और * (यह महत्वपूर्ण हिस्सा है), ये सूचकांक अलग-अलग हो सकते हैं या त्रिकोण का एक दिया बिंदु।
दूसरे शब्दों में, मैं तीन शीर्ष बफ़र्स सेट कर सकते हैं, सही इनपुट लेआउट सेट, और फिर सूचकांक बफर में मैं के बराबर कर दिया जाएगा:
l_aIndexBuffer[ NumberOfTriangles * 3 ]
for(i = 0; i < NumberOfTriangles; i++)
{
l_aIndexBufferData.add(triangle[i].Point1.PositionIndex)
l_aIndexBufferData.add(triangle[i].Point1.NormalIndex)
l_aIndexBufferData.add(triangle[i].Point1.TextureCoordinateIndex)
}
दस्तावेज में कई शीर्ष बफ़र्स का उपयोग कर के बारे में डायरेक्टएक्स इस बारे में कोई जानकारी नहीं देता है कि यह इंडेक्स बफर को कैसे प्रभावित करता है (इस पर और अधिक।)
कोड चलाने से अजीब प्रतिपादन परिणाम मिलते हैं जहां मैं जाल देख सकता था, मुझे अंतःस्थापित रूप से सही ढंग से खींचा जा रहा था (अजीब बहुभुज लेकिन लगभग एक तिहाई बिंदु सही जगह पर थे - संकेत - संकेत)
मुझे लगा कि मैं इस बिंदु पर (कल) अपने डेटा या मेरे सूचकांक खराब कर दूंगा, इसलिए मैंने इसे सभी को दर्दनाक रूप से मान्य किया, और इसलिए मुझे लगा कि मैं अपने इनपुट या कुछ और पर खराब कर रहा था। मैंने इसे सामान्य और बनावट बफर से मानों का उपयोग करके वैकल्पिक रूप से पिक्सेल शेडर द्वारा उपयोग किए गए रंग मान को सेट करके समाप्त कर दिया, रंग सही थे इसलिए मुझे पैडिंग समस्या का सामना नहीं करना पड़ा।
अंत में मैं निष्कर्ष है कि DX10/11 डेटा एक अलग फैशन में आदेश दिया उम्मीद होना चाहिए के लिए आया था, इसलिए मैं इस फैशन में सूचकांक भंडारण की कोशिश की: अजीब तरह पर्याप्त
indices.add(Point1Position index)
indices.add(Point2Position index)
indices.add(Point3Position index)
indices.add(Point1Normal index)
indices.add(Point2Normal index)
indices.add(Point3Normal index)
indices.add(Point1TexCoord index)
indices.add(Point2TexCoord index)
indices.add(Point3TexCoord index)
, यह एक गाया जाल झुकेंगे जो 1/3 सही - संकेत - संकेत देखा।
मैंने तब अनुमान लगाया कि शायद डीएक्स 10/डीएक्स 11 चाहता था कि 'वर्टेक्स बफर द्वारा' संग्रहित इंडेक्स का अर्थ है कि मैं पहले सभी त्रिकोणों के लिए सभी स्थिति सूचकांक जोड़ूंगा, फिर सभी त्रिकोणों के लिए सभी सामान्य सूचकांक, फिर सभी बनावट सभी त्रिकोणों के लिए सूचकांक समन्वय।
इससे एक और 1/3 सही (दिखने वाला) जाल मिला।
इससे मुझे लगता है - ठीक है, निश्चित रूप से डीएक्स 10/11 आपको एकाधिक वर्टेक्स बफर से स्ट्रीम करने की क्षमता प्रदान नहीं करेगा और फिर वास्तव में प्रति त्रिकोण बिंदु केवल एक सूचकांक की अपेक्षा करेगा?
केवल पदों की शिखर बफर में सूचकांक सहित एक ठीक से प्रदान की गई जाल है कि दुर्भाग्य से गलत normals और बनावट निर्देशांक का उपयोग करता है अर्जित करता है।
ऐसा लगता है कि सूचकांक बफर में सामान्य और बनावट समन्वय सूचकांक डाल ठीक से प्रदान की गई जाल से अधिक गलत ड्राइंग का कारण बना।
क्या यह अपेक्षित व्यवहार है?
एकाधिक वर्टेक्स बफ़र - एक सूचकांक बफर और सूचकांक बफर केवल एक त्रिकोण के एक बिंदु के लिए एक एकल सूचकांक हो सकती है?
कि वास्तव में सिर्फ मेरे लिए कोई मतलब नहीं है।
सहायता!
हे भगवान, मुझे कभी नहीं पता था कि आप अपने कशेरुक डेटा को इस तरह विभाजित कर सकते हैं! – Lucius
मुझे एक ही समस्या पहले से बहुत पहले नहीं थी और समाधान के दौरान खोज करते समय मैं [इस उत्तर] में आया (http://stackoverflow.com/a/2305383/1798046)। यह वास्तव में मुझे समस्या में और अधिक अंतर्दृष्टि प्राप्त करने में मदद की। मैं भी आपकी मदद कर सकता हूँ। – Krienie