2012-07-19 13 views
6

पर कस्टम विशेषताओं को पास करें क्या यह एक टुकड़े टुकड़े के लिए कस्टम विशेषताओं को पारित करना संभव है, मुझे पता है कि मैं GLES20.glVertexAttribPointer के माध्यम से वर्टेक्स शेडर में गुणों को पास कर सकता हूं, लेकिन मैं खंड के शेड में एक फ्लोट [] कैसे पास कर सकता हूं?एक कस्टम खंड शेडर

उत्तर

13

सं

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

+0

टिम, यह उत्तर वास्तव में मेरे लिए जगह में फंस गया कि वर्दी, गुण, और भिन्नताएं कैसे काम करती हैं। धन्यवाद! – Jackalope

+1

क्या इंटरपोलिंग कुछ हद तक नियंत्रित किया जा सकता है? उदाहरण के लिए एक (मशाल) प्रकाश स्रोत के मामले में, आप नहीं चाहते कि अलग-अलग त्रिकोणों में एक हाइलाइट उत्पन्न हो जो प्रत्येक वर्ग के लिए उपयोग किया जाता है। ओ राउंड ओ के बजाए, आपको दुख की बात है कि आप ओ के साथ \ या/इसके माध्यम से कुछ प्राप्त करते हैं। –

1

टिम का उत्तर बिल्कुल सही है।

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