2009-06-22 18 views
28

के बिना ओपनजीएल में एसवीजी प्रदर्शित करना मेरे पास कुछ सरल एसवीजी आर्टवर्क (आइकन और ग्लिफ चीजें हैं) जो मैं ओपनजीएल ऐप में प्रदर्शित करना चाहता हूं (क्यूटी का उपयोग करके डेबियन पर सी ++ में विकसित करना)।इंटरमीडिएट रास्टर

स्पष्ट समाधान छवि मैगिक libs को convert पर एसवीजी को रास्टर छवियों और बनावट के लिए उपयोग करने के लिए कुछ उपयुक्त बहुभुज (या केवल पुराने पुराने glDrawPixels का उपयोग करें) पर मानचित्र का उपयोग करना है।

हालांकि, मैं सोच रहा हूं कि वहां कुछ भी है जो एसवीजी का सीधे ओपनजीएल कॉल के अनुक्रम में अनुवाद करेगा और इसे ओपनजीएल की लाइनों, बहुभुजों और इसी तरह का उपयोग करके प्रस्तुत करेगा। किसी को भी कुछ भी पता है जो यह कर सकता है?

+2

हम्म .. बेजियर वक्र शामिल होने पर मुश्किल समस्या। एक समाधान देखने के लिए अच्छा लगेगा क्योंकि दोनों प्रौद्योगिकियां एक-दूसरे के साथ अच्छी तरह से पूरक हैं। – SpliFF

+1

इस प्रश्न को फिर से पूछा गया है http://stackoverflow.com/questions/6287650/rendering-svg-with-opengl-and-opengl-es/ – Fizz

उत्तर

12

क्यूटी यह कर सकता है।
QSvgRenderer एक एसवीजी लेने के लिए और इस पर पेंट एक QGLWidget
इसका संभवतः आप अगर आप एसवीजी के अलावा अन्य QGLWidget पर कुछ और आकर्षित करने के लिए चाहते हैं paintEvent() abit साथ बेला के आसपास की आवश्यकता होगी कर सकते हैं।

+0

धन्यवाद, बहुत रोचक (मुझे खुद को देखा जाना चाहिए था)। प्रलेखन से मुझे यह अस्पष्ट नहीं है कि क्या वेक्टर पहलू QPainter-on-QGLWidget में पूरी तरह से संरक्षित किया जाएगा या कुछ इंटरमीडिएट रास्टरराइजेशन होता है या नहीं। हालांकि GLintercept/GLtrace का उपयोग करने के लिए पर्याप्त आसान होना चाहिए ... – timday

+0

QPainter आमतौर पर कोई रास्टरराइजेशन नहीं करता है। एसवीजी के मामले में इसे शुरू करने का कोई कारण नहीं है। – shoosh

+0

मेरे प्लेटफॉर्म पर क्यूटी 4 ऐप्स के साथ काम करने के लिए जीएलटी्रेस प्राप्त करने के बाद (सरल फिक्स, लेखक को भेजा गया), मैं पुष्टि कर सकता हूं कि जीवी विजिट पर एसवीजी को ग्लो * कॉल की प्रभावशाली संख्या का उपयोग करके खींचा जा रहा है। ट्रॉल्टेक http://doc.trolltech.com/4.4/opengl-overpainting.html पर 2 डी और 3 डी दुनिया के संयोजन का एक अच्छा उदाहरण प्रदान करता है। एकमात्र चीज जिसे मैं कल्पना कर सकता हूं, आगे बढ़ना चाहते हैं, एक जीएल डिस्प्ले सूची में एसवीजी रेंडर कॉल को कैप्चर करना होगा (हालांकि ऐसा करने का एकमात्र कारण प्रदर्शन होगा, और यदि यह कोई समस्या बन गई तो मुझे बिटरमैप्स को कैश करने की अधिक संभावना होगी बजाय)। – timday

5

SVGL यह पता लगाने के लिए प्रतीत होता है लेकिन कई सालों से निष्क्रिय रहा है। फिर भी आप वहां कुछ मूल्य का मूल्य पा सकते हैं।

+0

नीचे "ड्रू" द्वारा उल्लिखित "सॉवेज" प्रोजेक्ट उत्तराधिकारी प्रतीत होता है। वही लेखक, लेकिन सी ++ की बजाय अजगर। – timday

2

ऐसा लगता है कि Inkscape में कुछ दिलचस्प निर्यात विकल्प हैं जो आप उपयोगी पा सकते हैं। इनमें डीएक्सएफ, पोवररे, ईपीएस, पीएस (पोस्टस्क्रिप्ट), एक्सएएमएल, लेटेक्स और ओपन डॉक्यूमेंट ड्रॉइंग (ओडीजी) शामिल हैं। शायद उनमें से एक के लिए कनवर्टर है और आप इंस्केप का उपयोग मध्यस्थ के रूप में कर सकते हैं।

विशेष रूप से डीएक्सएफ संभावित उम्मीदवार है क्योंकि यह पहले से ही एक आम 3 डी प्रारूप है। assimp डीएक्सएफ लोड करने के लिए एक अच्छा उम्मीदवार है।

+0

इंकस्केप में अभी तक एसवीजी का पूर्ण कार्यान्वयन नहीं है, इसलिए मैं कल्पना करूंगा कि इसके निर्यात विकल्प भी आंशिक हैं। – shoosh

+0

वैसे वास्तव में मैं जिस एसवीजी का उपयोग कर रहा हूं वह इंकस्केप में बनाया गया है, इसलिए जब तक यह सभी अपनी सामग्री को निर्यात कर सके ... कोई समस्या नहीं। – timday

+1

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

5
+0

यह मूल रूप से मेरे मन में सबसे नज़दीक लगता है। इसकी पाइथननेस वास्तव में एक समस्या नहीं हो सकती है क्योंकि मैं शुद्ध सी ++ की बजाय पीईक्यूटी 4 का उपयोग करके एप फ्रंट एंड करने के साथ काम कर रहा हूं। – timday

1

वहाँ भी है, एक संभावना

1

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

2011 के बाद से, कला के राज्य मार्क किल्गार्ड के बच्चे, NV_path_rendering, जो वर्तमान में केवल एक विक्रेता (Nvidia) विस्तार आप पहले से ही अपने नाम से समझ गए होंगे के रूप में है। उस पर सामग्री का एक बहुत कुछ कर रहे हैं:

आप पाठ्यक्रम लोड SVGs और इस तरह के https://www.youtube.com/watch?v=bCrohG6PJQE के कर सकते हैं। वे पथ के लिए पोस्टस्क्रिप्ट वाक्यविन्यास का भी समर्थन करते हैं।तुम भी पथ मिश्रण कर सकते हैं अन्य ओपन (3 डी) सामान के साथ प्रतिपादन, के रूप में पर डेमो:

NV_path_rendering अब दृश्य, जब उपलब्ध पीछे गूगल के Skia पुस्तकालय द्वारा किया जाता है। (एनवीडिया ने 2013 और 2014 के अंत में कोड का योगदान दिया।) कैरो देवों में से एक (जो इंटेल कर्मचारी भी है) ऐसा लगता है कि यह भी http://lists.cairographics.org/archives/cairo/2013-March/024134.html है, हालांकि मैं अभी तक कैरो के उपयोग के लिए किसी भी ठोस प्रयास के बारे में नहीं जानता NV_path_rendering।

एक अपस्टार्ट भी कम (या नीचे दाएं) विक्रेता समर्थन या अकादमिक ग्लिट्ज नैनोवीजी है, जो वर्तमान में विकसित और बनाए रखा गया है। (https://github.com/memononen/nanovg) ओपनजीएल पर 2 डी पुस्तकालयों की संख्या को देखते हुए जो समय के साथ आते हैं और चले गए हैं, आप मेरी विनम्र राय में किसी प्रमुख विक्रेता द्वारा समर्थित कुछ का उपयोग करके एक बड़ी शर्त ले रहे हैं।

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