संकल्प स्वतंत्र पाठ का प्रतिपादन


11

मुझे अपने खेल में संकल्प स्वतंत्र पाठ आकर्षित करने का एक तरीका चाहिए। यही है, मुझे पाठ को ज़ूम करने और पिक्सेल कलाकृतियों को देखने में सक्षम होने की आवश्यकता नहीं है।

क्या कोई इस बारे में कोई सुझाव दे सकता है कि मैं इसके बारे में कैसे जा सकता हूं?


मुझे लगता है कि आपको वेक्टर आधारित फोंट के तरीकों पर ध्यान देने की आवश्यकता होगी, बजाय फटे हुए फोंट की, जो एक शुरुआती बिंदु हो सकता है। मैं इस मामले का कोई विशेषज्ञ नहीं हूं, इसलिए मैं किसी ऐसे व्यक्ति को जाने दूंगा जो जवाब देना चाहेगा।
रे डे

जवाबों:


7

इसे करने के तीन सामान्य तरीके हैं। यह वास्तव में कलाकृतियों को पूरी तरह से खत्म करने के बारे में नहीं है - जो कि असंभव है, जब तक कि आपके पास असीमित मेमोरी या प्रोसेसर समय नहीं है - बल्कि उन्हें इस तरह से कैसे कम करें कि आपके मौजूदा कोड और लक्ष्य प्लेटफार्मों के साथ फिट बैठता है।

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

दूसरा, आप अपने पाठ को एक जाल के रूप में संग्रहीत कर सकते हैं। कुछ पुस्तकालय ऐसा करने के लिए मौजूद हैं, जैसे GLTT , या आप अपना स्वयं का लिख ​​सकते हैं। अब आपके पास पिक्सेल कलाकृतियां नहीं हैं, लेकिन आपके पास बहु-स्तरीय कलाकृतियां होंगी यदि आप बहुत करीब से ज़ूम करते हैं - जैसे किसी 3 डी गेम में किसी अन्य जाल की तरह। मेष पाठ बहुत सारे नेत्र कैंडी को मानता है क्योंकि शीर्ष शेड को लागू किया जा सकता है और मेष को आपके द्वारा किए जाने वाले किसी भी अन्य ड्राइंग के साथ इंटरलीव किया जा सकता है। यह स्मृति और सीपीयू पर यथोचित रूप से हल्का है, और इसकी लागत को मापना आसान है क्योंकि यह सिर्फ एक मानक जाल है। यह सामान्य स्प्राइट-आधारित 2D रेंडरिंग पाइपलाइन में एकीकृत करने के लिए दर्द हो सकता है।

तीसरा, आप एक पिक्सेल shader के साथ संयोजन में दूरी फ़ील्ड का उपयोग कर सकते हैं । यह एक अपेक्षाकृत नई तकनीक है जो वर्तमान में लोकप्रिय है, एक साधारण बनावट का नमूना करने के लिए एक साधारण बनावट का उपयोग करके और अपने वीडियो कार्ड पर "फ्री" बिलिनियर फ़िल्टरिंग करके ग्लिफ़ को बड़े पैमाने पर साफ करने के लिए। यह अन्य तरीकों की तुलना में बहुत कम और आसानी से अनुमान लगाने योग्य मेमोरी का उपयोग करता है - प्रति फ़ॉन्ट सेट प्रति वर्ण 0.5MB से 1MB बनावट। यह स्प्राइट-आधारित प्रतिपादन पाइपलाइनों में अच्छी तरह से फिट बैठता है क्योंकि यह स्प्राइट-आधारित है; प्रत्येक ग्लिफ़ अभी भी एक बनावट वाला क्वाड है। यह पिक्सेल कलाकृतियों का उत्पादन करता है, लेकिन बनावट के पैमाने पर अन्य तरीकों की तुलना में बहुत कम है। यदि पिक्सेल शेड्स अनुपलब्ध हैं, तो एक निश्चित-फ़ंक्शन फ़ॉलबैक भी है, लेकिन पाठ बहुत अधिक रूप से समाप्त हो जाता है। क्योंकि नमूना एक पिक्सेल shader में किया जाता है यह सस्ते के लिए outlining और शैडोइंग की तरह कुछ आँख कैंडी मानता है।


3

लूप और ब्लिन द्वारा माइक्रोसॉफ्ट रिसर्च का एक शोध लेख भी है , जिसमें शेडर्स का उपयोग करते हुए रेज़ोल्यूशन इंडिपेंडेंट कर्व्स है। यह एक स्वतंत्र स्वतंत्र रूप में ट्रू टाइप पाठ को प्रस्तुत करने के लिए प्रस्तुत तकनीक का उपयोग करने का सुझाव देता है।


1

आपको अपने फ़ॉन्ट वर्णों को घटता और रेखाओं के संयोजन से बनाने की आवश्यकता होगी, जिन्हें आप रनटाइम के लिए उपयुक्त स्तर के साथ ज्यामिति में बदलते हैं।

सौभाग्य से अधिकांश फोंट पहले से ही बेजियर कर्व्स से निर्मित हैं। वक्र डेटा प्राप्त करने के लिए आपको उन्हें निकालने के लिए मानक Windows GetGlyphOutline () फ़ंक्शन का उपयोग करने की आवश्यकता है।

मुझे यकीन नहीं है कि अगर आप बिना PInvoke के C # से वह वक्र डेटा प्राप्त कर सकते हैं।


1
इस क्रॉस-प्लेटफ़ॉर्म को बनाने और PInvoke सामान के बारे में चिंता न करने के लिए, यह मुझे लगता है कि आप डेटा को डंप करने के लिए एक टूल लिखने में सक्षम होंगे जो GetGlyphOutline कुछ कस्टम प्रारूप में पढ़ता है ( इस SO प्रश्न को देखें ) और फिर खेल कोड में कुछ सरल फ़ाइल I / O को केवल आपके कस्टम संग्रहित ग्लिफ़ डेटा को लोड करने के लिए।
Ricket

0

तुम freetype पर एक नज़र रखना चाहते हो सकता है। मुझे नहीं पता कि यह आपके प्लेटफ़ॉर्म पर उपलब्ध है या यदि लाइसेंस लागू है, लेकिन यह सत्य-प्रकार और अन्य वेक्टर फोंट प्रदान करने के लिए एक उत्कृष्ट ओपन सोर्स लाइब्रेरी है। मेरा मानना ​​है कि उन्हें कुछ चतुर वकील करने के लिए कोड को चकमा देने के लिए एक सौंदर्यवादी तरीके से प्रस्तुत करना था। सही प्रकार तरीका रेंडरर को संकेत प्रदान करने के लिए घटता पर बाइट कोड शामिल करता है ताकि महत्वपूर्ण फ़ॉन्ट विशेषताओं (जैसे कि ऊर्ध्वाधर और सेरिफ़) को धुंधला न हो, क्योंकि वे मानक भोले विरोधी अलियासिंग का उपयोग करेंगे। उस तकनीक का उस पर पेटेंट है, इसलिए फ़र्ज़ी लोगों को कुछ और काम करना पड़ता था, जो कि Apple के भयानक वकील-जानवर (मुझे लगता है) को नहीं करता था। वैसे भी, एक तरफ कानूनी रूप से अलग, freetype में देखने का प्रयास करेंhttp://freetype.sourceforge.net/index2.html

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