मुझे ग्रेग के उत्तर पर विस्तार करने दें।
यह सच है कि क्यूटी में एक एसवीजी रेंडरर क्लास, QSvgRenderer है। साथ ही, क्यूटी में जो भी चित्र आप करते हैं, उसे "क्यूपेंटडिवाइस" पर किया जा सकता है, जहां हमें निम्नलिखित "पेंट डिवाइसेस" में रुचि है:
- एक क्यूटी विजेट;
- विशेष रूप से, एक जीएल-आधारित क्यूटी विजेट (QGLWidget);
- एक क्यूटी छवि
इसलिए, यदि आप क्यूटी उपयोग करने का निर्णय, अपने विकल्प हैं: खिड़की की स्थापना (और जीएल संदर्भ) के अपने वर्तमान पद्धति का उपयोग करके
- बंद करो, और का उपयोग शुरू आपके सभी प्रतिपादन के लिए QGLWidget, जिसमें एसवीजी प्रतिपादन शामिल है। आपकी जरूरतों के आधार पर यह एक बहुत छोटा बदलाव हो सकता है। QGLWidget विशेष रूप से इसकी क्षमताओं में सीमित नहीं है।
- QIvgRenderer का उपयोग QImage को प्रस्तुत करने के लिए करें, फिर उस QImage से डेटा को एक जीएल बनावट (जैसा कि आप सामान्य रूप से करेंगे) में डाल दें, और इसे किसी भी तरह से प्रस्तुत करें (उदा। आयताकार जीएल_क्वैड में)। अन्य विधि की तुलना में खराब प्रदर्शन हो सकता है लेकिन आपके कोड में कम से कम परिवर्तन की आवश्यकता है।
आश्चर्य है कि QGLWidget वास्तव में क्या करता है? खैर, जब आप QTLWidget को Qt प्रतिपादन आदेश जारी करते हैं, तो उन्हें आपके लिए जीएल कॉल में अनुवादित किया जाता है। और यह तब भी होता है जब एसवीजी रेंडरर द्वारा प्रतिपादन आदेश जारी किए जाते हैं। तो अंत में, आपका एसवीजी जीएल प्राइमेटिव्स (लाइन, बहुभुज, आदि) के गुच्छा के माध्यम से प्रस्तुत किया जा रहा है।
इसका कोई नुकसान है। विभिन्न वीडियोकार्ड ओपनजीएल को थोड़ा अलग तरीके से कार्यान्वित करते हैं, और क्यूटी उन सभी मतभेदों के लिए खाता नहीं (और नहीं कर सकता)। इसलिए, उदाहरण के लिए, यदि आपके उपयोगकर्ता के पास एक सस्ते ऑन-बोर्ड इंटेल वीडियोकर्ड है, तो उसका वीडियोकॉर्ड ओपनजीएल एंटीअलाइजिंग का समर्थन नहीं करता है, और इसका मतलब है कि यदि आप इसे सीधे QGLWidget पर प्रस्तुत करते हैं तो आपका एसवीजी एलियाज्ड (जागी) भी देखेंगे। एक QImage के माध्यम से जाने से ऐसी समस्याओं से बचा जाता है।
जब आप रीयलटाइम में ज़ूम कर रहे हों तो QImage विधि का उपयोग कर सकते हैं। यह सिर्फ इस बात पर निर्भर करता है कि आपको कितनी तेज़ी से इसकी आवश्यकता है। आपको सावधानीपूर्वक अनुकूलन की आवश्यकता हो सकती है जैसे कि समान QImage का पुन: उपयोग करना, और अपने QPainter के लिए क्लिपिंग सक्षम करना।
स्रोत
2010-11-10 09:21:21
आपका मॉनीटर रास्टर डिस्प्ले है, इसलिए यह किसी बिंदु पर रास्टरराइज होने वाला है, सवाल यह है कि रास्टराइजेशन पर्याप्त देर से होता है ताकि आप जो काम करना चाहते हैं उसे सुविधाजनक बना सकें। ओपनजीएल के पास किसी फ़ाइल प्रारूप (शेडर भाषा में लिखे गए कोड को छोड़कर) के लिए कोई विशिष्ट समर्थन नहीं है, इसलिए यह सब कुछ जो आप लिखना चाहते हैं उसके नीचे आता है। –
असल में, यह वही सवाल है जैसे http://stackoverflow.com/questions/4054612/2d-vector-graphic-renderer-for-opengl – Fizz