2012-09-10 17 views
9

मैंने ओपनजीएल ईएस 2.0 सीखना शुरू कर दिया है, इस प्रक्रिया के दौरान मैंने कुछ शर्तों को पूरा किया जो परिभाषाओं के बावजूद मुझे समझ में नहीं आते हैं। इस तरह: अंतर्वेशनओपनजीएल में इंटरपोलेशन क्या है?

पुस्तक ओपन ES 2.0 प्रोग्रामिंग गाइड से, मैं प्रक्षेप के लिए इस परिभाषा देखें:

से प्रत्येक खंड के लिए एक अलग मूल्य उत्पन्न करने के लिए इस्तेमाल किया तंत्र आदिम के प्रत्येक चरम पर आवंटित अलग-अलग मानों को इंटरपोलेशन कहा जाता है।

हालांकि मैं समझता हूँ कि क्या Linear Interpolationthis answer से है, परिभाषा से ऊपर भावना मेरे लिए नहीं है।

क्या आप इसे एक और तरीका बताएंगे और इंटरपोलेशन पर विस्तृत करने के लिए एक उदाहरण बनायेंगे?

+0

सामान्य रूप से इंटरपोलेशन एक मौलिक माथेमैटिकल ऑपरेशन है और यदि वास्तव में यह है कि आप एक स्पष्टीकरण के लिए क्या पूछ रहे हैं, तो आपको 3 डी कंप्यूटर ग्राफिक्स के रूप में जटिल कुछ करने में पहले अपने सामान्य गणितीय ज्ञान को गहरा बनाना चाहिए। –

उत्तर

10

एक सामान्य परिभाषा "दूसरे शब्दों में" के रूप में आप वेब पर कुछ मिल सकता है .. के रूप में उदाहरण के लिए मैं आप को यह समझाने की कोशिश कर सकते हैं:

आप प्रक्षेप का उपयोग जब आप डेटा की एक सीमित मात्रा में है उदाहरण के लिए, असीमित मात्रा में डेटा का प्रतिनिधित्व करने की कोशिश कर रहे हैं, उदाहरण के लिए, आपके पास एक पंक्ति का प्रतिनिधित्व करने वाले 2 अंक हैं:

इंटरपोलेशन के लिए आपको हमेशा प्रतिनिधित्व के संकेत की आवश्यकता होती है, लाइन मामले में आपको 2 अंक की आवश्यकता होती है (और संकेत "यह एक रेखा है"), मान लें कि वे वैक्टर ए और बी हैं। अब समाधान दोनों दिशाओं में अंतहीन रेखा प्राप्त करने के लिए T(s) = A + s*(B-A) किसी वास्तविक संख्या के लिए है। ए और बी के बीच एक रेखा प्राप्त करने के लिए आपको अंतराल पर 'एस' परिभाषित करने की आवश्यकता है [0, 1] ताकि T(0)=A जबकि T(1)=B और यह रैखिक इंटरपोलेशन है।

थोड़ा के लिए और अधिक जटिल छेड़छाड़ आप ओपन में एक सा देख सकते हैं:

ध्यान दें कि जीएल और अपने GPU में इस्तेमाल किया एल्गोरिदम और अधिक जटिल हैं और फिर अनुकूलित क्या मैं के बारे में यहाँ लिखने के लिए कर रहा हूँ लेकिन आम तौर पर है एक ही परिणाम।

आकारों के मामले में आप आम तौर पर 3 वैक्टर (वर्टेक्स) के साथ परिभाषित त्रिकोण का उपयोग करते हैं और कहते हैं कि यह एक त्रिकोण है (आप अपने ड्रॉ विधि में 'त्रिकोण' कहते हैं)। उन वैक्टरों को कुछ मैट्रिस लगाने के बाद आपको ड्रा बफर पर अपना 2 डी प्रक्षेपण मिलेगा (वर्टेक्स शेडर में हो सकता है)। अब आपको उन सभी बिंदुओं को बफर में कुछ रंग, बनावट या रंग इंटरपोलेशंस से भरना होगा। सबसे पहले, उन सभी खींचे गए बिंदु (वास्तव में बफर पर उनकी स्थिति) एक रैखिक इंटरपोलिंग तंत्र का परिणाम है (आपके पास जीएल में इसका कोई नियंत्रण नहीं है)। दूसरा रंग भरने के लिए आमतौर पर फिर से रैखिक इंटरपोलेशन होता है:

रंग सूचक सेट करके विभिन्न रंगों के शिखर के साथ एक त्रिकोण ड्राइंग करने का प्रयास करें। आपको पूरी सतह पर एक अच्छा चिकनी रंगीन स्पेटर मिलेगा जो पदों के अंतःक्रिया के आधार पर रंगों के रैखिक इंटरपोलेशन का परिणाम होता है (आपको प्रत्येक पिक्सेल के लिए टुकड़े टुकड़े में स्थिति इंटरपोलेशन परिणाम मिलता है जिसे खींचा जाना आवश्यक है)।आप मैन्युअल रूप से इस तरह इस रंग प्रक्षेप परिणाम प्राप्त कर सकते हैं:

इनपुट:

Vector a, b, c; //original triangle positions 
Vector interpolationABC; //current fragment interpolation between a, b and c 
Color colorA, colorB, colorC; //colors for vectors a, b and c 

निर्गम (यह टुकड़ा का रंग):

Color output = (
(a - interpolationABC).length() * colorA + 
(b - interpolationABC).length() * colorB + 
(c - interpolationABC).length() * colorC) 
/(
(a - interpolationABC).length() + 
(b - interpolationABC).length() + 
(c - interpolationABC).length()); 

इस तंत्र फिर से एक रैखिक प्रक्षेप (एक बहुत ही धीमी गति का प्रतिनिधित्व करता है एक वास्तव में, लेकिन यह चाल करना चाहिए और बहुत पठनीय है)

गैर रेखीय इंटरपोलेशन के उदाहरण के लिए आपको कुछ कल्पना की आवश्यकता होगी: आइए कहें कि हम एक क्षेत्र बना रहे हैं। इसे सरल रखने के उद्देश्य से मान लें कि इसका केंद्र (0,0,0) है और इसका त्रिज्या 1 है। क्षेत्र एन त्रिकोण के साथ बनाया गया है और यदि एन प्रदर्शन के कारण पर्याप्त नहीं है (ज्यादातर मामलों) यह एक मुद्दा है थोड़ा "edgy" और हम इसे थोड़ा सा चिकना करना चाहते हैं। तो हमें कुछ रोशनी चालू करनी है (यह सिर्फ एक सर्कल है जिसमें कोई रोशनी नहीं है) और यह पता लगाएं कि मानक कैसे सेट करें। एक तरफ आप 3 अंकों से परिभाषित सतह के लिए एक सामान्य गणना कर सकते हैं और प्रत्येक त्रिभुज का अनूठा सामान्य होगा लेकिन दूसरी ओर "डिस्को बॉल" प्रभाव उत्पन्न होगा, दूसरी तरफ आप जानते हैं कि किसी भी बिंदु 'पी' क्षेत्र का सामान्य है normalized(P-center) या इस मामले में खुद ही बिंदु। इसलिए प्रत्येक वर्टेक्स सामान्य वर्टेक्स की स्थिति है (इसलिए अब प्रत्येक त्रिभुज में 3 अलग-अलग मानक होते हैं) और प्रत्येक टुकड़े का सामान्य उन मानकों का एक इंटरपोलेशन होता है:

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

फिर, इंटरपोलेशन तंत्र एक ऐसी तंत्र है जो केवल सीमित संख्या में डेटा को जानकर असीमित परिणामों का उत्पादन कर सकती है (उन तंत्रों में से एक को "रैखिक इंटरपोलेशन" कहा जाता है)। या दूसरे शब्दों में आप थोड़ा अधिक विशिष्ट उदाहरण के लिए पोस्ट के रूप में:

से प्रत्येक खंड के लिए एक अलग मूल्य उत्पन्न करने के लिए इस्तेमाल किया तंत्र आदिम से प्रत्येक शीर्ष करने के लिए सौंपा अलग-अलग मान प्रक्षेप कहा जाता है।

+0

धन्यवाद मैटिक, यह वास्तव में प्रभावशाली है। स्पष्टीकरण के कुछ हिस्सों के लिए अभी भी मेरे लिए पचाने के लिए अभी भी बहुत जटिल है, मैं इसे एक संदर्भ के रूप में रखूंगा, मुझे लगता है कि ओपनएल में गहराई से मुझे इसकी आवश्यकता होगी। – neevek

+1

अच्छा स्पष्टीकरण, आपको अतीत में मेरा उत्थान मिला है :) लेकिन एक छोटा सुधार: ए और बी * (ए और बी बिंदुओं सहित) के बीच एक रेखा प्राप्त करने के अंतराल * ∈ [0,1] 'है। क्योंकि 0 के लिए यह है: 'ए +0 (बी-ए) = ए', पहला चरम; और 1 के लिए यह 'ए + 1 (बी-ए) = ए + बी-ए = बी', विपरीत वाला है। –

+0

@ हाय-एंजेल उस सुधार के लिए धन्यवाद, मुझे नहीं पता कि मुझे यह कैसे याद आया। मैंने इसे अभी तय किया है। –

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