2012-08-01 19 views
12

में टेक्स्ट खींचने का सही तरीका मैं सी ++ के साथ विंडोज़ पर अपना गेम विकसित करने के लिए पावरवीआर ओपनजीएल ईएस 2 एसडीके का उपयोग कर रहा हूं, तो मैं इसे एंड्रॉइड या आईफोन पर बंद कर सकता हूं।ओपनजीएल ईएस 2

सबकुछ ठीक दिखता है लेकिन अब मैं पाठ प्रतिपादन के साथ फंस गया हूं। मुझे सी ++ का उपयोग करके ओपनजीएल ईएस 2.0 में पाठ को प्रस्तुत करने (टीटीएफ या बिटमैप फ़ॉन्ट का उपयोग करके) के बारे में कोई विस्तृत ट्यूटोरियल नहीं मिला। मुझे जावा या उद्देश्य-सी (टेक्स्टव्यू, सतही दृश्य या कुछ ब्ला ब्लाह चीजों के साथ) का उपयोग करके एंड्रॉइड या आईफोन पर पाठ प्रस्तुत करने के बारे में कई विषय बात मिलीं लेकिन मुझे नहीं लगता कि मुझे यही चाहिए। मुझे "क्रॉस-प्लेटफ़ॉर्म समाधान" की आवश्यकता है। (या हो सकता है मैं इस बिंदु पर गलत हूँ?)

थोड़ा अनुसंधान के बाद, मैं मेरे मन में समाधान है:

लोड और बाँध बिटमैप फ़ॉन्ट बनावट ->पार्स पाठ और पैदा करते हैं और बाँध कोने सरणी, यूवी सरणी के साथ मानचित्रण बनावट, ... ->यह प्रस्तुत स्क्रीन करने के लिए

मैं अभी तक परीक्षण नहीं रहा हूँ, लेकिन मुझे लगता है कि यह एक समस्या है जब मेरे समाधान का उपयोग: मैं के लिए पाठ बदलने के लिए (चाहते हैं उदाहरण: मैं उपयोगकर्ता स्कोर बना रहा हूं, या स्क्रीन पर टाइमर बना रहा हूं) मुझे वर्टिस एरे और यूवी सरणी को दोबारा बांधना होगा, यह नहीं है एक अच्छा विचार, है ना?

क्या OpenGL ES 2 के साथ स्क्रीन पर बिटमैप फ़ॉन्ट खींचने का कोई बेहतर तरीका/सही तरीका है?

उत्तर

2

पाठ प्रतिपादन विषय सबसे नए आने वालों 3 डी पुस्तकालयों दुनिया में अभी या बाद में सामना करने के लिए की जरूरत में से एक है।

टेक्स्ट प्रतिपादन के बारे में इंटरनेट के आस-पास बहुत सारे ट्यूटोरियल हैं, इसके बारे में कई पुस्तकें बात कर रही हैं। मेरी सलाह है कि चारों ओर देखो और यह समझने की कोशिश करें कि वे कैसे काम करते हैं।

टीटीएफ फोंट एक व्यवहार्य समाधान नहीं हैं, क्योंकि वास्तविक समय कंप्यूटिंग परिदृश्य (कंप्यूटर गेम की तरह) में, टीटीएफ की ज्यामिति आधारित तकनीक बहुत अधिक संसाधन लेने वाली है।

एक बहुत ही सामान्य समाधान (उदाहरण के लिए मैं अपने पैट्रिया 3 डी इंजन में उपयोग करता हूं) एक बनावट एटलस का उपयोग करना है जिसमें विभिन्न पात्रों के ग्लिफ होते हैं, तो आपके एप्लिकेशन तर्क को टेक्स्ट -> ग्लाइफ स्थिति संबंध को संभालने की आवश्यकता होती है quads की बनावट है कि अपने अंतिम "स्क्रीन पाठ पर" रचना करेंगे के लिए।

पाठ प्रतिपादन एक सरल विषय नहीं है, क्योंकि यह आकार कर्निंग/रिक्ति/अलग पाठ के रूप में विषयों को शामिल आदि इस लिंक के लिए सबसे अच्छा (विषय को समझने का पालन करने के

कोशिश करता है, तो मैं गलत नहीं हूँ, इस के लेखक विकी इस समुदाय का एक सक्रिय सदस्य है)।

http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01

4

समाधान है कि आप का उल्लेख जाने का रास्ता है, और वास्तव में, यदि आप अपने पाठ को संशोधित, आप ज्यामिति है कि यह प्रतिनिधित्व करता पुनः बनाना होगा, और ओपन करने के लिए पुनः सबमिट करें।

इस मनोरंजन चरण में कुछ समय लगेगा, लेकिन निश्चित रूप से अत्यधिक नहीं।

  • , अपने बनावट एटलस बनाने बिटमैप
  • इस बनावट का उपयोग कर पाठ आकर्षित फ़ॉन्ट मैट्रिक्स पर विचार (आकार, कर्निंग, आदि:

    पाठ प्रतिपादन के लिए, समस्या दो मुख्य घटक हैं) और संभवतः उपपिक्सेल एंटीलायज़िंग़

अपने बनावट एटलस बनाने के लिए

, आप के आसपास (शायद freetype का प्रयोग करके) या (जैसे AngleCode's bmfont के रूप में) एक मौजूदा उपकरण का उपयोग कुछ कोड पा सकते हैं।

ड्राइंग के लिए, शायद आप कुछ मौजूदा कोड के आधार पर अपना कोड लॉन्च करना चाहते हैं, क्योंकि अच्छे दिखने वाले टेक्स्ट के लिए सही विवरण प्राप्त करने के लिए बहुत सारे विवरण हैं। अपना सिरदर्द शुरू करने के लिए, आप this article पर एक नज़र डाल सकते हैं।

प्रेरणा का एक अच्छा आधुनिक स्रोत Nicolas Rougier's freetype-gl कोड हो सकता है। का वर्णन करने विविधताओं https://www.mapbox.com/blog/text-signed-distance-fields/

इसके अलावा वाल्व से इस Siggraph कागज (हाफ लाइफ और पोर्टल के रचनाकारों) देखें:

+0

क्या किसी के पास ओपनजीएल ईएस 2.0 एंड्रॉइड उदाहरण है जो रोटेशन का समर्थन करता है? – Burf2000

0

एक खेल में पाठ आकर्षित करने के लिए उचित तरीके से ग्लिफ़ युक्त दूरी फ़ील्ड से बनावट एटलस उपयोग करने के लिए है तकनीक: http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

दूरी फ़ील्ड-आधारित टेक्स्ट गुणवत्ता सादे बिटमैप आधारित टेक्स्ट से काफी अधिक है। यह कम स्मृति का भी उपयोग करता है क्योंकि दूरी फ़ील्ड फ़ॉन्ट के वर्बैटिम बिटमैप प्रस्तुति से छोटा है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^