2010-11-06 13 views
8

में एंटी-एलाइजिंग मैंने अभी ओपनजीएल प्रोग्रामिंग के साथ शुरुआत की है और मैं घड़ी का आवेदन कर रहा हूं। http://i.stack.imgur.com/E73ap.jpgओपनजीएल

हालांकि, अपने आवेदन बहुत "गैर-विरोधी aliased" दिखता है:: http://i.stack.imgur.com/LUx2v.png

मैंने कोशिश की GL_SMOOTH_POLYGON विधि में लाल किताब में उल्लेख किया है मैं इसे कुछ इस तरह सरल देखने के लिए चाहते हैं। हालांकि ऐसा कोई प्रतीत नहीं होता है।

मैं इंटेल एकीकृत ग्राफिक्स वाले लैपटॉप पर काम कर रहा हूं। कार्ड doesn't support चीजें जैसे GL_ARB_multisample।

इस बिंदु पर मेरे ऐप को एंटी-एलाइज्ड देखने के लिए मेरे विकल्प क्या हैं?

उत्तर

27

इंटेल एकीकृत वीडियोकार्ड ओपनजीएल एंटीअलाइजिंग के समर्थन की कमी के लिए कुख्यात हैं। हालांकि, आप इसके आसपास काम कर सकते हैं।

पहले विकल्प: मैनुअल supersampling
स्क्रीन के रूप में एक बनावट 2x बार के रूप में बड़ा करें। अपने दृश्य को एफबीओ के माध्यम से बनावट में प्रस्तुत करें, फिर बनावट को आधे आकार में प्रस्तुत करें ताकि यह बिलीनेर इंटरपोलेशन के साथ स्क्रीन भर सके। पिक्सेल में 4x की वृद्धि के कारण बहुत धीमी (जटिल दृश्यों में) हो सकती है।

परिणामस्वरूप कमजोर एंटीअलाइजिंग (इसलिए मैं इसे आपकी घड़ी जैसी डेस्कटॉप सॉफ़्टवेयर के लिए अनुशंसा नहीं करता)। खुद के लिए देखें:
antialiasing vs supersampling

दूसरा विकल्प: (उन्नत)
एक शेडर उपयोग Morphological Antialiasing प्रदर्शन करने के लिए। यह एक नई तकनीक है और मुझे नहीं पता कि इसे कार्यान्वित करना कितना आसान है। इसका उपयोग कुछ उन्नत खेलों द्वारा किया जाता है।

तीसरा विकल्प:
उपयोग बनावट और द्विरेखीय प्रक्षेप अपने लाभ के लिए द्वारा बनावट के माध्यम से ओपन के पुरातन नकल। तकनीक का वर्णन here है।

चौथा विकल्प: अपनी घड़ी के प्रत्येक तत्व के लिए एक अलग बनावट का उपयोग करें।

उदाहरण के लिए, अपने घंटे-तीर के लिए, अपने तीर की तरह आकार वाले एक फ्लैट काले GL_POLYGON का उपयोग न करें। इसके बजाय, एक घुमावदार GL_QUAD का उपयोग करें, एक छवि प्रोग्राम में खींची गई एक घंटे-तीर छवि के साथ बनावट। फिर बिलीनेर इंटरपोलेशन इसे घुमाए जाने पर एंटीअलाइजिंग का ख्याल रखेगा।

यह विकल्प कम से कम प्रयास करेगा और बहुत अच्छी तरह से दिखता है।

पांचवें विकल्प:
एक पुस्तकालय है कि प्रतिपादन सॉफ्टवेयर का समर्थन करता है का उपयोग करें -

  • क्यूटी
  • काहिरा
  • विंडोज GDI +
  • WPF
  • XRender
  • आदि

इस तरह के पुस्तकालयों में एंटीअलाइज्ड प्रतिपादन के लिए अपने स्वयं के एल्गोरिदम होते हैं, इसलिए वे एंटीअलाइजिंग के लिए आपके वीडियोकार्ड पर निर्भर नहीं होते हैं। फायदे हैं:

  • रेंडर करेगा हर मंच पर एक ही। (यह विभिन्न मामलों में ओपनजीएल के साथ गारंटी नहीं है - उदाहरण के लिए, आपके स्क्रीनशॉट में मोटी विकर्ण "टिक" लाइनों को आयत के बजाए समांतरोग्राम के रूप में प्रस्तुत किया जाता है)
  • सुविधाजनक ड्राइंग फ़ंक्शंस का एक बड़ा समूह है ("ड्राएआरसी", " drawText "," drawConcavePolygon ", और वे ग्रेडियेंट्स और सीमाओं का समर्थन करेंगे। आपको छवि वर्ग की तरह चीजें भी मिलती हैं।)
  • कुछ, क्यूटी की तरह, अधिक डेस्कटॉप-ऐप प्रकार की कार्यक्षमता प्रदान करेंगे। यह एक घड़ी ऐप के लिए भी बहुत उपयोगी हो सकता है। उदाहरण के लिए:
    • ओपनजीएल ऐप में आप शायद हर 20 एमसीसी को लूप करेंगे और घड़ी को फिर से प्रस्तुत करेंगे, और दो बार भी नहीं सोचेंगे। यह अनावश्यक CPU चक्रों को हॉग करेगा, और बैटरी को कम करने, लैपटॉप पर सीपीयू को जगाएगा। इसके विपरीत, क्यूटी बहुत बुद्धिमान है जब इसे आपकी घड़ी के हिस्सों को फिर से निकालना होगा (उदाहरण के लिए, जब घड़ी का दायां आधा खिड़की से ढंका हुआ हो, या जब आपकी घड़ी मिनट-तीर को एक चरण में ले जाती है)।
    • लागू करने के बाद, उदाहरण के लिए एक ट्रे आइकन, या एक सेटिंग संवाद, आपकी घड़ी के लिए, क्यूटी जैसी लाइब्रेरी इसे एक स्नैप बना सकती है। सब कुछ के लिए एक ही पुस्तकालय का उपयोग करना अच्छा है।

नुकसान बहुत खराब प्रदर्शन है, लेकिन उस बात सब पर एक घड़ी एप्लिकेशन के लिए नहीं है, और यह चारों ओर मुड़ता है जब आप खाते में मैंने कहा बुद्धिमान-redrawing कार्यक्षमता ले।

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

+0

शायद मेरा अपना जवाब बहुत जल्दबाजी वाला था: मुझे लगता है कि अभ्यास का बिंदु ओपनजीएल का उपयोग करना था, लेकिन आप काफी सही हैं कि 2 डी पुस्तकालय अधिक उपयुक्त हैं। उदाहरण घड़ी में "3 डी" प्रभावों में से कोई भी वास्तविक 3 डी प्रतिपादन, प्रकाश, छाया आदि के साथ हासिल नहीं किया जाता है –

+1

इस उत्तर से प्रेरित, मैंने पूछा [यह अनुवर्ती प्रश्न] (http://gamedev.stackexchange.com/q/71953/43384) जो supersampling को लागू करने के तकनीकी विवरणों को संबोधित करता है, उदाहरण के लिए, सवाल उठाना कि बिलीनेर फ़िल्टरिंग वास्तव में सुपरसंपलिंग के लिए जाने का तरीका है या नहीं। – bluenote10

0

इसे अंतिम फ्रेम में दो बार (या अधिक) फ्रेमबफर ऑब्जेक्ट में खींचें और फिर उस छवि को वास्तविक विंडो में खींचे गए एक क्वाड के लिए बनावट के रूप में उपयोग करें।