XNA में सीधे SVG कला का प्रतिपादन


36

मान लीजिए कि मेरे पास एसवीजी जैसे कुछ सदिश प्रारूप में 2 डी कला का एक गुच्छा है। वहाँ एक आसान तरीका है कि सीधे प्रदान करने के लिए एक पूर्ण SVG रेंडरर खुद को लागू करने के बिना है?

बेशक मैं इसे अलग-अलग रिज़ॉल्यूशन / ज़ूम स्तरों के लिए ऑफ-लाइन (जैसे सामग्री पाइपलाइन में) rasterize कर सकता था, लेकिन मैं निरंतर ज़ूम स्तरों पर क्रिस्प विज़ुअल्स बनाए रखना चाहूंगा जो वेक्टर ग्राफिक्स प्रदान करते हैं।

जवाबों:


24

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


सबसे पहले GPU रत्न 3 से एक लेख है: GPU पर रेंडरिंग वेक्टर आर्ट (और संबंधित लूप-ब्लाइन पेपर )।

सबसे कठिन हिस्सा यह है कि, जबकि द्विघात वक्रों को खींचना आसान है, घन घटता (जैसे कि आपके सामान्य एसवीजी में पाया जाता है) काफी कठिन हैं। लेख इस पर विस्तार से जाता है, लेकिन आपको अपनी गणित की टोपी लाने की आवश्यकता होगी।

घन घटता प्रदान करने का विकल्प घन वक्रों को द्विघात में बदलना है। एक गैर-तुच्छ समस्या भी।

एक बार जब आप जीपीयू पर वेक्टर घटता प्रस्तुत कर सकते हैं, तो यह आपकी सामग्री पाइपलाइन में एसवीजी को पार्स करने और इसे एक जाल में बदलने का एक सरल मामला है जिसे आप प्रस्तुत कर सकते हैं। एसवीजी को पार्स करना आसान है , वैसे।

एक और, संभावित रूप से आसान विकल्प है सभी को एक साथ मोड़ना और बस अपने एसवीजी के एक रैखिक सन्निकटन को त्रिभुज करना।

इन दोनों समाधानों के लिए त्रिकोणीयकरण की आवश्यकता होती है - यहाँ एक उचित त्रिकोणीय XNA के अनुकूल है


पूरी तरह से अलग विकल्प के रूप में, आप लगभग-वेक्टर-जैसे तेज किनारों के साथ स्प्राइट्स को रेंडर करने के लिए "डिस्टेंस फील्ड" का उपयोग कर सकते हैं।

यह कैसे करना है पर SIGGRAPH 2007 से वाल्व का एक पेपर है: सदिश बनावट और विशेष प्रभावों (पीडीएफ) के लिए बेहतर अल्फा-टेस्टेड मैगनी ures केशन

यहां मूल विधि को लागू करना बहुत आसान है। कठिनाई तब होती है जब इसे तेज कोनों का समर्थन करने की कोशिश की जाती है (केवल कागज में छुआ कुछ)। इस पद्धति में किसी भी चीज़ के लिए कुछ बहुत ही गंभीर सीमाएँ हैं लेकिन सरल आकृतियाँ बनाना। यह UI पाठ और decals के लिए सबसे उपयुक्त है (जैसे वाल्व इसका उपयोग कर रहा है)।


अब जब मैंने वह सब कह दिया है - मुझे यह कहना है कि, मेरे अनुभव में, यहाँ सभी प्रयास इसके लायक नहीं हैं!

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

(पहली तकनीक जो मन में आती है, वह आपके स्प्राइट्स के उच्च-रिज़ॉल्यूशन संस्करण mipmapping ( विकी ) है, जो आपको अधिकतम स्प्राइट आकार तक रिज़ॉल्यूशन स्वतंत्रता देने के लिए है।)

यह ब्लॉग पोस्ट शायद आपकी XNA सामग्री पाइपलाइन में SVG रेंडरिंग सपोर्ट जोड़ने के लिए एक अच्छी जगह है।


बहुत बढ़िया जवाब, धन्यवाद! जिस तरह से अपने आप को फांसी देने के लिए पर्याप्त रस्सी से अधिक है। अंत में, मैं शायद बिटमैप मार्ग पर जाने के लिए आपकी सलाह लूंगा। इस बीच, मुझे कुछ पढ़ने को मिला! : पी
drxzcl

क्या यह जवाब अभी भी सटीक है?
lochok

@lochok हाँ। मेरे जवाब में ऐसा कुछ नहीं है जो अचानक काम करना बंद कर दे। यह संभव है कि भविष्य में वैक्टर करने का एक बेहतर तरीका विकसित किया जा सकता है - लेकिन, लेखन के समय, मैंने कुछ भी नया नहीं सुना है।
एंड्रयू रसेल

मेरा मतलब है कि कोई मौजूदा समाधान नहीं है
lochok
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.