फास्ट एंटीएलियास लाइन ड्राइंग


11

ब्रेसेनहम की लाइन एल्गोरिथ्म केवल तेजी से पूर्णांक संचालन (इसके अलावा, घटाव और 2 से गुणा) का उपयोग करके सीधी रेखाएं खींचने का एक तरीका है। हालांकि, यह अलियासड लाइनें जेनरेट करता है। क्या एंटीएलियास लाइनों को खींचने का एक समान तेज़ तरीका है?


1
एक दो सवाल ... क्या आप सीपीयू या जीपीयू पर ड्राइंग लॉजिक कर रहे हैं? इसके अलावा, क्या आप पूर्णांक आधारित एल्गोरिदम या फ़्लोटिंग पॉइंट की तलाश कर रहे हैं?
एलन वोल्फ

5
@AlanWolfe, सीपीयू पर पूर्णांक एल्गोरिदम - वही माहौल जिसे ब्रेसेनहैम के एल्गोरिदम के लिए डिज़ाइन किया गया था।
मार्क

3
en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm क्लासिक एक है, हालांकि विकिपीडिया पृष्ठ सुंदर आधा बेक किया हुआ है और मेरे पास कागज तक पहुंच नहीं है। यह एक आलसी सवाल की तरह लगता है, क्योंकि यह कुछ बुनियादी googling कर इसे खोजने के लिए बहुत आसान है।
युरिक्स

2
बस जोर से सोचकर, मुझे लगता है कि बहु-पिक्सेल-मोटी रेखाओं को खींचने के लिए ब्रेसेनहैम को अनुकूलित करना आसान होना चाहिए। फिर आप गणितीय आदर्श रेखा से प्रत्येक पिक्सेल केंद्र की दूरी की गणना करके और कुछ फ़ॉलऑफ़ फ़ंक्शन लागू करके एंटीएलियासिंग कर सकते हैं।
नाथन रीड

2
हालांकि, मैं किसी टिप्पणी को सही नहीं कह सकता।
मार्क

जवाबों:


9

क्या एंटीएलियास लाइनों को खींचने का एक समान तेज़ तरीका है?

नहीं, क्योंकि परिभाषा के अनुसार एक एंटी-एलियास लाइन अधिक पिक्सल को छूती है। इस तरह के एल्गोरिदम धीमे होंगे।


एक सॉफ्टवेयर rasterizer में, एंटी-अलियासड रेखाएं खींचने का सर्वव्यापी तरीका Xiaolin Wu का लाइन एल्गोरिदम है । इसे लागू करना मुश्किल नहीं है, और वैसे भी उस लिंक पर असामान्य रूप से उच्च-गुणवत्ता का छद्म कोड है।

एक हार्डवेयर रेखापुंज पाइप में, लाइन प्रिमिटिव को डिफ़ॉल्ट (या उपयोगकर्ता-प्रदत्त) ज्यामिति शेडर द्वारा एक स्क्रीन-स्पेस क्वाड तक विस्तारित किया जाता है, और फिर दो त्रिकोणों के रूप में खींचा जाता है, जो तब सामान्य तरीकों से अलियास हो सकता है।

एक रिऐट्रैसर में, विभिन्न प्रकार के विकल्प होते हैं। यह सोचने के लायक है कि आप वास्तव में 1D ऑब्जेक्ट कैसे खींचना चाहते हैं। शायद एक सिलेंडर के रूप में (वू छाया!)। ध्यान दें कि यह परिप्रेक्ष्य / पूर्वाभास के मुद्दों को प्रस्तुत करता है जो आप चाहते हैं (या नहीं हो सकता है)। एक स्पष्ट सामान्यीकरण नहीं है। फिर, जाहिर है, आप जो कुछ भी करते हैं, आप उसे पूरा करते हैं।


"और वैसे भी उस लिंक पर असामान्य रूप से उच्च-गुणवत्ता का छद्म कोड है", मैं असहमत हूं। यह छद्म कोड संभवतः वू के एल्गोरिदम का उचित कार्यान्वयन नहीं है, भले ही ऐसा लगता है कि वेब के आसपास अनगिनत स्थानों पर इसका उपयोग किया गया था। वू के मूल एल्गोरिथ्म को केंद्र की ओर दोनों छोर से खींचा गया था और वास्तव में ब्रेसेनहैम की तुलना में तेज़ था क्योंकि यह अधिक पिक्सेल के लिए लिखते हुए भी लगभग आधे ऑपरेशन करता है। मैं वू के वास्तविक एल्गोरिदम के बारे में बात कर रहा हूं जो लिंक किए गए विकिपीडिया लेख में पोस्ट नहीं किया गया है।
ऑक्टोपस

@ ओक्टोपस [अस्पष्ट संदेह व्यक्त करता है, विशेष रूप से तेज़ बिट पर, लेकिन इसका खंडन या पुष्टि करने के लिए संदर्भ का अभाव है - यदि ऐसा है, तो स्रोत, सुधार और संपादन निश्चित रूप से स्वागत योग्य हैं।]
imallett

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

1
लेकिन मैं @ ऑक्टोपस से सहमत हूं, यहां तक ​​कि "ड्रॉ ​​को एक छोर से दूसरे छोर तक" स्वीकार करते हुए, स्यूडोकोड केवल वू का एल्गोरिदम है यदि पूर्णांक अंकगणित का उपयोग किया जाता है। कोड मैं देख रहा हूं कि फ्लोटिंग-पॉइंट अंकगणित का उपयोग करता है, जो एक महत्वपूर्ण बदलाव है। वू के पेपर में, एल्गोरिथ्म केवल पूर्णांक अंकगणित (या वास्तव में निश्चित-बिंदु अंकगणित) का उपयोग करता है।
Jan-Janke लार्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.