OpenGL में पाठ को प्रस्तुत करने का पसंदीदा तरीका [बंद]


17

मैं एक विश्वविद्यालय परियोजना के लिए एक बार फिर से कंप्यूटर ग्राफिक्स लेने वाला हूं। पिछले प्रोजेक्ट के लिए मैंने FTGL नामक एक पुस्तकालय का उपयोग किया था जो मुझे बहुत संतुष्ट नहीं छोड़ता था क्योंकि यह मुझे भारी लगता था (मैंने बहुत सारी रेंडरिंग तकनीक की कोशिश की, टेक्स्ट रेंडरिंग बहुत अच्छे पैमाने पर नहीं हुई)।

मेरा सवाल यह है कि क्या इसके लिए एक अच्छी और कुशल लाइब्रेरी है? यदि नहीं, तो तेज़ लेकिन अच्छा दिखने वाला टेक्स्ट लागू करने का तरीका क्या होगा? कुछ इच्छित उपयोग इस प्रकार हैं:

  • फ्लोटिंग ऑब्जेक्ट / कैरेक्टर लेबल
  • संवाद
  • मेनू
  • HUD

संपादित करें: अधिमानतः यह फोंट भी लोड कर सकता है


1
यह एक "प्रश्न का उपयोग करने के लिए कौन सी तकनीक है", और इस तरह शायद बंद होना चाहिए।
लॉरेंट कौविदो

जवाबों:


4

एक लोकप्रिय ढांचा क्रेज़ी एडी का GUI है

लेकिन जब तक यह अपील की जाती है, अपने स्वयं के रोल करने के लिए यह असामान्य नहीं है (और शायद बाद में पछतावा होने के कारण इसे पछतावा है;);

बिटमैप्स पर आपके ग्लिफ़ का होना सामान्य है और फिर OpenGL का उपयोग करके बिटमैप को आकर्षित करें।

कभी-कभी आप क्षणिक पाठ दिखाते हैं जो केवल मुट्ठी भर फ्रेम के लिए दिखाई दे सकता है। बस GL_QUADS + glVertex का उपयोग करना पर्याप्त होगा। लेकिन किसी भी बड़ी मात्रा में पाठ या दृश्यता की किसी भी लंबी अवधि के लिए GL_QUADS को VBO में डालने के लायक है - मैंने इससे बड़े प्रदर्शन सुधारों को देखा है।

निश्चित रूप से वास्तविक ग्लिफ़ उत्पन्न करने का प्रश्न है जिसकी आपको आवश्यकता है। Bmfont जैसे प्रोग्राम हैं जिनका उपयोग आप उसके लिए कर सकते हैं। या आपको और अधिक जटिल प्रतिपादन की आवश्यकता हो सकती है, उदाहरण के लिए मांग पर freetype। मैं अपने स्वयं के रेंडरर के साथ bmfont का उपयोग बहुत खुशी से कर रहा हूं, यह कटौती करने के लिए बहुत सरल है।


9

बहुत सारे तरीके हैं - आप जो चाहते हैं उसके आधार पर ... हर जगह की तरह, "सबसे अच्छा समाधान" जैसा कुछ नहीं है। आपका लक्ष्य क्या है? आप किस भाषा का उपयोग कर रहे हैं? पाठ के आकार बदलने / घूमने के बारे में क्या - क्या यह आवश्यक है? क्या आपको TrueTypeFonts को प्रस्तुत करने में सक्षम होना चाहिए? बहुभाषी / यूनिकोड के बारे में क्या? आप अपने पाठ (जो एन्कोडिंग आदि) को कैसे संग्रहीत करना चाहते हैं?

मैंने अतीत में भी FTGL का उपयोग किया था, साथ ही साथ शुद्ध freetype (http://www.freetype.org/ FTGL इस पर आधारित है), विभिन्न प्रकार के बिटमैप फ़ॉन्ट, रूपरेखा फ़ॉन्ट ... अब मैं ज्यादातर बिटमैप के आदी हूँ फोंट, लेकिन केवल मेरी व्यक्तिगत पसंद है। क्योंकि मैं न तो विभिन्न चार्जसेट, एन्कोडिंग और उस तरह के सामान से निपटना चाहता हूं - और बिटमैपफोन के लिए लाइसेंसिंग भी TrueTypeFonts की तुलना में आसान और सस्ता है। और हर पलटन पर इसका प्रयोग करने योग्य है जो छवियों को लोड कर सकता है। मैं ओपनजीएल में बस एक क्वाड का उपयोग करता हूं और उस पर अपनी बनावट का एक हिस्सा मैप करता हूं। दूसरा पक्ष यह है: फ़ॉन्ट केवल +/- 50% के बारे में एक कारक पर साफ करने योग्य होगा। यदि आप उस के साथ रह सकते हैं, तो मैं एक बिटमैपफोंट का उपयोग करने का सुझाव दूंगा।

यदि आपको अलग-अलग एन्कोडिंग / चार्जस से निपटना है, तो आपको ट्रू टाइप फोन्स को लोड करने और उपयोग करने का तरीका ढूंढना चाहिए (जैसे कि फ़्रीटाइप के साथ, किसी अन्य लाइब्रेरी का उपयोग करके या अपने स्वयं के उपकरण के साथ) ...

इस विषय पर अलग-अलग ट्यूटोरियल पर एक नज़र डालें:

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 बिटमैप फ़ॉन्ट्स

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 आउटलाइन फ़ॉन्ट्स

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 बनावट रूपरेखा रूपरेखा फ़ॉन्ट

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 2D बनावट फ़ॉन्ट

सौभाग्य!


+1 प्रदर्शन की बहुमूल्य जानकारी के लिए धन्यवाद, मुझे नेह के ट्यूटोरियल के बारे में पता था। मुझे लगता है कि मैंने बिटमैप फोंट का उपयोग किया था ... लेकिन इसका कोई पैमाना नहीं था: लगभग 60 लेबल ऊपर के दृश्य में तैरते हुए रेखाओं से जुड़ते हैं, उस पर कोई जानकारी? (मैं सोच रहा था कि मुझे एक फ्लाईवेट पैटर्न को लागू करने के तरीके की तलाश करनी चाहिए)
ड्यूकफैगिंग

1
सावधानी: नेह के ट्यूटोरियल पुराने फिक्स्ड फंक्शन पाइपलाइन के लिए हैं और अक्सर अपडेट नहीं होते हैं। यदि आप एक आधुनिक OpenGL समाधान की तलाश कर रहे हैं तो stackoverflow.com/questions/5262951/…
brita_

6

यदि आप बिटमैप फ़ॉन्ट का उपयोग करना चाहते हैं, तो आप एंजेलकोड बिटमैप फ़ॉन्ट जनरेटर के साथ बहुत गलत नहीं हो सकते: http://www.angelcode.com/products/bmfont/

यह एक या अधिक टैक्स्चर (अच्छी तरह से पैक की गई ग्लिफ़ के साथ) के लिए एक truetype फॉण्ट को रूपांतरित करता है, और UVs और स्पैकिंग वाली एक छोटी फ़ाइल को आउटपुट करता है (मुझे लगता है कि XML आउटपुट के साथ काम करना आसान है, और रिक्ति डेटा की गुणवत्ता आमतौर पर है बहुत अच्छा, सच्ची गुठली के बिना भी)


1

मैं OpenGL (stb_image, stb_truetype) के तहत truetype-glyphs रेंडर करने के लिए सीन बैरेट के पुस्तकालयों का उपयोग कर रहा हूं ।

मरम्मत / घूम कर जाएं परियोजना एक यूजर इंटरफेस बनाने के लिए इन पुस्तकालयों उपयोग कर रहा है ( IMUI )


0

QML पर विचार करें । यह सिंटैक्स का उपयोग करने में आसान के साथ पूरी तरह कार्यात्मक यूआई लाइब्रेरी है। मेरे अनुभव में CEGUI की तुलना में इसका फीचर सेट काफी बेहतर है, और इसका बेहतर प्रलेखन, समर्थन और समुदाय है क्योंकि इसका प्राथमिक लक्ष्य डेस्कटॉप एप्लिकेशन है और ऑफस्क्रीन रेंडर करने की क्षमता सिर्फ एक बोनस है।

पेशेवरों:

  • यह सभी प्रतिपादन के लिए पीछे के छोर पर OpenGL का उपयोग करता है
  • यह होस्ट सिस्टम के लिए उपलब्ध किसी भी फ़ॉन्ट को लोड कर सकता है और आपके द्वारा संसाधनों के रूप में शामिल किए गए अतिरिक्त फ़ॉन्ट को पार्स भी कर सकता है
  • यह कुशल और उच्च गुणवत्ता वाले आउटपुट के लिए हस्ताक्षरित दूरी क्षेत्र पाठ प्रतिपादन का उपयोग करता है
  • यह सीधे एक OpenGL बनावट को प्रस्तुत कर सकता है , जिससे आप अपने गेम के वातावरण में परिणाम आसानी से रख सकते हैं
  • Qt में बहुत सारी भाषाएं हैं

विपक्ष:

  • क्यूटी एक बड़ा ढांचा है
  • Direct3D या Vulkan प्रोजेक्ट्स में QML का उपयोग करने के लिए उचित API में GL बनावट प्राप्त करने के लिए हुप्स के माध्यम से कूदने की आवश्यकता होती है (या QML के लिए मूल D3D / Vulkan रेंडरर्स लिखने के लिए किसी की प्रतीक्षा)
  • क्यूएमएल में अभी भी कुछ मामूली झगड़े हैं, जहां आप एक ऑफ़स्क्रीन सतह पर रेंडर करने पर भी एक देशी नियंत्रण का उपयोग करने का प्रयास करेंगे, जैसे जब आप किसी सूची आइटम के लिए ड्रॉपडाउन खोलने का प्रयास करते हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.