1 से अधिक या 0 से कम की बनावट का सामना करना क्यों संभव है


11

मैं एक पाठ के बारे texture mappingमें और preparing to drawसत्र में पढ़ रहा हूँ , मैंने पढ़ा:

टेक्सचर रैपिंग पैरामीटर्स को परिभाषित करें। यह तब नियंत्रित करेगा जब कोई बनावट 1.0 से अधिक या 0.0 से कम का समन्वय करती है।

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap);  
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap);  

जहां रैप है:
GL_REPEAT: निर्दिष्ट करता है कि यह पैटर्न दोहराएगा (यानी, रैप-अराउंड) यदि परिवर्तित बनावट 0.0 से कम या 1.0 से अधिक का सामना करती है, तो इसका सामना करना पड़ता है।

GL_CLAMP: निर्दिष्ट करता है कि पैटर्न 0.0 या 1.0 के मान पर "छड़ी" करेगा।

लेकिन ऐसी कोई व्याख्या नहीं है कि इस तरह के बनावट निर्देशांक का सामना करने का कारण क्या है?
उदाहरण के लिए मान लीजिए कि मैंने सिर्फ एक आयत बनाई है और मैं उस पर एक बनावट के रूप में एक छवि लागू करना चाहता हूं, क्या इस तरह के निर्देशांक का सामना करना संभव है?

जवाबों:


5

सभी बनावट बनावट के निर्देशांक का उपयोग नहीं करते हैं जो मेष डेटा से आते हैं। उदाहरण के लिए, अनुमानित बनावट के साथ , आप दुनिया को बनावट के स्थान में बदल देते हैं। खैर, उस दुनिया का बहुत हिस्सा बनावट के [0, 1] रेंज के बाहर पड़ता है। किसी प्रकार की क्लैंपिंग मोड के बिना, आपको समस्याएं होने वाली हैं।


10

संक्षेप में, एक बनावट को दोहराने के लिए।

इसलिए, यदि आपके पास एक क्वाड है, और बनावट के निर्देशांक 0 से 1 तक जाते हैं, तो बनावट एक बार खींची जाएगी। यदि निर्देशांक 0 से 2 तक जाते हैं और लपेटने के लिए सेट किया जाता है GL_REPEAT, तो बनावट दो बार खींची जाएगी।

इसे आज़माएँ और इसे अपने आप से देखें


ok @Panda पाजामा इस तरह से एक कोड के लिए: फ्लोट x0 = 0; // छवि फ्लोट y0 = 0 के ऊपरी बाएं कोने; फ्लोट X1 = x0 + ImageWidth; // छवि के निचले दाएं कोने में y1 = y0 + ImageHeight; glBegin (GL_TRIANGLE_STRIP); {glTexCoord2f (0, 1); glVertex2f (x0, y1); glTexCoord2f (0, 0); glVertex2f (x0, y0); glTexCoord2f (1, 1); glVertex2f (X1, y1); glTexCoord2f (1, 0); glVertex2f (X1, y0); } अंतराल (0,1) से परे बनावट निर्देशांक का सामना करने की कोई संभावना नहीं है?
सेपीडीह अबदपुर

1
@sepideh: बिल्कुल नहीं। आपने विशेष रूप से अपनी बनावट के निर्देशांक [0, 1] सीमा पर रखे। जो आपको समझ में नहीं आता है वह आपको नहीं करना है ; आप उन्हें कुछ भी बना सकते थे। इसके अलावा, टिप्पणियों में कोड का एक गुच्छा पोस्ट न करें। यदि आप स्पष्टीकरण चाहते हैं, तो अपने प्रश्न को संपादित करें।
निकोल बोलस

मेरे प्रश्न को पास करने के बारे में आपके मार्गदर्शन के लिए ठीक है धन्यवाद। मैं आदेशों में कोड स्वरूपित करने का एक तरीका खोज रहा था लेकिन नहीं मिल सका !!! तो आपका मतलब है कि इस तरह के निर्देशांक का सामना करना एक रन-टाइम संभव घटना नहीं है। यह केवल प्रोग्रामर द्वारा स्पष्ट रूप से बनावट को दोहराने या न करने के लिए निर्दिष्ट किया गया है।
सेपीडीह अबदपुर

1
@sepideh "रन-टाइम संभव घटना नहीं" का क्या मतलब है? glTexCoord2f(0, 2);उदाहरण के लिए टिप्पणी में अपना कोड बदलना पूरी तरह से ठीक है । इसका एक बहुत विशिष्ट अच्छी तरह से परिभाषित अर्थ है, दोनों कोड में और जब प्रोग्राम चल रहा है। यदि आप इसे देखते हैं, तो प्रोग्रामर ने जानबूझकर ऐसा किया है क्योंकि यह वह परिणाम देता है जो वे चाहते हैं।
जोसेफ मैन्सफील्ड

2
@sepideh का बेशक। OpenGL आपको जो भी मान देता है उसका उपयोग करता है। यदि आप इसे 0 से 1 की सीमा में मान देते हैं, तो आपको कभी और कुछ नहीं मिलेगा।
जोसेफ मैंसफील्ड

5

हाँ, आप बनावट निर्देशांक की तुलना में अधिक 1.0और छोटे से मुठभेड़ कर सकते हैं 0.0

यह पूरी तरह से आपके द्वारा लोड किए गए मॉडल पर निर्भर करता है। आम तौर पर, प्रत्येक शीर्ष के लिए स्थिति, सामान्य और बनावट समन्वयित होती है। अधिकांश मेष फ़ाइल स्वरूपों में, बनावट समन्वय किसी भी सीमा तक सीमित नहीं है।

इसका उपयोग किसी बनावट को दोहराने के लिए किया जाता है । उदाहरण के लिए, कोने की एक ट्रैक्टर के बीच एक बनावट चार समय को पार करने वाली, बनावट निर्देशांक होगा 0,0, 0,4, 4,0और 4,4। बनावट रैपिंग के बिना, आप प्रत्येक बनावट निर्देशांक के साथ 4 बार में सतह विभाजित करने के लिए 4 उप सतहों अतिरिक्त सिरे की आवश्यकता होगी 0,0, 0,1, 1,0, 1,1। बेहतर कार्य प्रदर्शन में कुछ लंबों का परिणाम होता है।

आमतौर पर, यह वांछित नहीं है कि उपयोगकर्ता दोहराए गए बनावट के किनारों को नोटिस करता है। इसलिए, अधिकांश मामलों में दोहराए जाने वाले टेक्सटाइल तुलनीय हैं। थन का अर्थ है, दायाँ किनारा, बाईं ओर और ऊपरी किनारे से नीचे की ओर एक सीध में आता है। इस तरह, संक्रमण सुचारू है और उम्मीद है कि उपयोगकर्ता द्वारा नोटिस नहीं दिया जाएगा।

एक और अधिक उन्नत, लेकिन संबंधित विषय इस तथ्य को चतुराई से समझने के लिए है कि एक ही बनावट को कई बार दोहराया गया था। उदाहरण के लिए, अलग-अलग आकार के बार-बार बनावट को मिश्रित करना, उदाहरण के लिए एक दीवार की बनावट और एक गंदगी का डीकल, एक सामान्य तकनीक है।


Without texture wrapping, you would need additional vertices to split the surface into 4 times 4 sub surfaces with each the texture coordinates 0,0, 0,1, 1,0, 1,1यह कुछ वास्तविक व्यावहारिक व्याख्या है! धन्यवाद!
अमित तोमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.