आप एक ज्यामिति शेडर का उपयोग कर सकते हैं जो आपके लाइन के एक सेगमेंट इनपुट के रूप में ले जाएगा और एक क्वाड (दो त्रिकोणों से बना त्रिकोण पट्टी) आउटपुट करेगा ताकि क्वाड की चौड़ाई स्क्रीन स्पेस में स्थिर हो और इच्छा से मेल खाती हो रेखा मोटाई। यह पूरी तरह से अच्छी तरह से काम करता है (इसे सीएडी 3 डी इंजन में लागू करने के लिए)।
यदि ज्यामिति शेडर एक विकल्प नहीं है, तो एक वर्कअराउंड वर्टेक्स शेडर का उपयोग करने के लिए हो सकता है, लेकिन इसके लिए आपके वीबी के कुछ पुन: कार्य की आवश्यकता होगी। ध्यान रखें कि वीएस को इसके बाद लाइन सेगमेंट का ज्ञान होना चाहिए ताकि आप अपने प्रत्येक वीबी तत्वों के लिए पी और पी + 1 को संग्रहित कर सकें, साथ ही सूचकांक/शिखर के डुप्लिकेशन की लागत (उपयोग की जाने वाली टोपोलॉजी के आधार पर) यदि आप अपनी लाइन को अनुक्रमित आदिम के रूप में प्रस्तुत करते हैं या नहीं)।
यदि प्रदर्शन कोई मुद्दा नहीं है, तो CPU पर विस्तार करना संभवतः जाने का तरीका है।
संपादित करें:
पानी का छींटा पैटर्न के बारे में: आप glLineStipple
व्यवहार का अनुकरण करने के लिए भी एक ज्यामिति शेडर का उपयोग कर सकते हैं। यदि आपके पास GL_LINES
टोपोलॉजी है, तो अलग लाइन कहनी है, पैटर्न प्रत्येक नए लाइन सेगमेंट पर पुनरारंभ होता है। तो आपको बस अपने लाइन सेगमेंट के स्क्रीन-स्पेस क्षैतिज प्रारंभ (या लंबवत प्रारंभ, अभिविन्यास के आधार पर) ज्यामिति शेडर में गणना करना होगा और इस अतिरिक्त इंफोस को पिक्सेल शेडर पर पास करना होगा। पिक्सेल शेडर कारक और पैटर्न मानों (डायरेक्टएक्स 10/11 इंटीजर और बिटवाई निर्देशों के अनुसार इसे आसान बनाता है) के अनुसार टुकड़ों को हटाने का उत्तरदायी होगा।
फिर से यह अच्छी तरह से काम करता है, और आप इसे अनुरूपित चौड़ाई रेखाओं (ऊपर उल्लिखित पहली तकनीक के साथ) के साथ जोड़ सकते हैं।
अब यदि आपके पास GL_LINE_STRIP
टोपोलॉजी है, तो पैटर्न प्रत्येक नए आदिम (इसलिए प्रत्येक नई ड्रा कॉल के लिए) पर पुनरारंभ होता है। स्थिति थोड़ा और जटिल हो जाती है क्योंकि आपको पहले से प्रस्तुत किए गए पिक्सेल की संख्या और प्रत्येक लाइन सेगमेंट के लिए ज्ञान की आवश्यकता होती है।
आप डायरेक्टएक्स 10 स्ट्रीम-आउट कार्यक्षमता का उपयोग करके एक अस्थायी वीबी में अपनी लाइन स्ट्रिप को प्रस्तुत करने के साथ प्राप्त कर सकते हैं (इस वीबी का प्रत्येक तत्व प्रत्येक खंड की स्क्रीन-स्पेस लंबाई से मेल खाता है)। फिर आपको इस वीबी के समांतर उपसर्ग योग (उर्फ स्कैन) करना होगा (प्रत्येक पंक्ति खंड लंबाई मान जमा करने के लिए)।
आखिरकार, आप अपनी लाइन स्ट्रिप GL_LINES
के लिए प्रस्तुत करते हैं लेकिन पीएस में इस अतिरिक्त स्कैन वीबी सूचनाओं का उपयोग करते हैं।
यह एक दिलचस्प समाधान है। क्या आपने glLineWidth कॉल (प्रति पिक्सेल आधार पर) के मुकाबले एक ही परिणाम प्राप्त करने के लिए हासिल किया था? – Stringer
मैंने इसे प्रति-पिक्सेल की जांच नहीं की, लेकिन अप्रत्याशित, एंटीअलाइज्ड लाइनों के लिए परिणाम पर्याप्त रूप से समान होना चाहिए। एक बनावट का उपयोग करना (ओपनजीएल के स्टिपल पैटर्न का अनुकरण करने के लिए, उदाहरण के लिए) आपको दर्द की दुनिया में लाने के लिए निश्चित रूप से सुनिश्चित किया जाता है, जिसमें बनावट निर्देशांक के गैर-लाइनर इंटरपोलेशन (जो एनवीडिया क्वाड्रोस अधिकतर समान भौगोलिक भाग की तुलना में आश्चर्यजनक रूप से खराब हैं)। Texcoords सही पाने के लिए शेडर को बहुत अधिक काम करने की जरूरत है। – Pepor
आप स्वयं को आजमा सकते हैं, बनावट निर्देशांक के लिए बस "लाइन पिक्सेल में लाइन लम्बाई" का उपयोग करें और उस बनावट के साथ रेखा को खींचें जिसमें उस पर एक कठोर पैटर्न है। आप आश्चर्यचकित होंगे कि पैटर्न कितना असमान है। कम से कम मैं था। ;-) – Pepor