नहीं, वास्तव में ऐसा करने का कोई तरीका नहीं है।
एक ज्यामिति शेडर आह्वान के लिए एक इनपुट आदिम की आवश्यकता होती है और 0 या अधिक आउटपुट आदिम उत्पन्न करता है। एक इनपुट आदिम के बिना, वास्तव में ज्यामिति shader को आह्वान करने का एक तरीका नहीं है । बेशक आप प्रत्येक इनपुट आदिम के लिए ज्यामिति shader की अधिकतम संख्या में आउटपुट प्राइमिटिव की सीमा को बढ़ा सकते हैं (अभी व्यावहारिक सीमा नहीं जानते हैं, हजारों के क्रम पर होना चाहिए)। तो आप शायद प्रत्येक बिंदु के लिए 1024 त्रिकोण उत्पन्न कर सकते हैं, लेकिन आपके पास हमेशा कुछ इनपुट प्राइमेटिव्स होने चाहिए।
हालांकि आपको जो कुछ भी चाहिए वह ज्यामिति की वास्तविक धारणा नहीं है। आपको वास्तव में किसी भी उचित स्थान पर 3 डी बिंदुओं को प्रस्तुत करने की आवश्यकता नहीं है, वे केवल कुछ सार सूचकांक या बनावट निर्देशांक या जो भी विशेषताएँ हो सकती हैं और जरूरी नहीं कि एक सार्थक 3 डी स्थिति हो। कोई भी यह बताता है कि आपके कार्यक्षेत्र में क्या विशेषता है। और आप भी किसी भी विशेषताओं के बिना कोने प्रस्तुत कर सकते हैं । लेकिन आपको उन पर ज्यामिति शेडर लागू करने के लिए कुछ प्राइमेटिव्स को प्रस्तुत करना होगा, भले ही उन प्राइमेटिव्स के पास कोई वास्तविक गुण न हों (फिर आप ज्यामिति शेडर में अपने आउटपुट ज्यामिति की गणना कैसे करें, एक अलग सवाल है, हालांकि)।
लेकिन आपने वास्तव में क्या किया, प्रत्येक ग्रिड सेल के लिए एक बिंदु प्रदान करना और उस सेल के लिए मार्चिंग क्यूब्स त्रिकोण उत्पन्न करना, बिल्कुल सीधे-आगे का दृष्टिकोण है। बेशक इस सेल में क्या विशेषताएँ हैं, यह आपके ऊपर है, यह एक 3D स्थिति हो सकती है, एक टेक्सकोर्ड को 3D बनावट में, जो भी हो, लेकिन वे ग्रिड सेल हैं जिन्हें आप प्रस्तुत करते हैं। विशुद्ध रूप से बोली जाने वाली, आप वास्तव में उन बिंदुओं को "त्याग" नहीं करते हैं और फिर उन्हें त्रिकोण द्वारा "प्रतिस्थापित" करते हैं, आप प्रत्येक बिंदु को त्रिकोण के एक सेट में परिवर्तित करते हैं। यही कारण है कि ज्यामिति shader के लिए है और इसके बारे में "hacky" या "अनुचित" कुछ भी नहीं है। कोई नहीं कहता है कि ज्यामिति शेडर को उसी आउटपुट आदिम प्रकार को उत्पन्न करना है जैसा कि इनपुट "उचित" होना था ।
आप अपने वोकेल ग्रिड को प्रस्तुत करने के एक बड़े पैमाने पर इनपुट-कम तरीके को प्राप्त करने के लिए क्या कर सकते हैं (और यह वही हो सकता है जो आप वास्तव में पूछ रहे थे) केवल जिम्मेदार बिंदुओं के एक सेट को आकर्षित करना होगा। इसका मतलब है कि आपको किसी भी विशेषता सरणियों की आवश्यकता नहीं है और बस उन सभी को अक्षम करें और उन glDrawArrays
कोशिकाओं की संख्या के साथ एक सरल आह्वान करें जिनकी आपको आवश्यकता है। फिर वर्टेक्स शेडर या ज्योमेट्री शेडर में आप आवश्यक 3 डी ग्रिड सेल इंडेक्स को इनपुट वर्टेक्स आईडी (यानी gl_VertexID
, जो आपके पास एकमात्र जानकारी है) से थोड़ा इंडेक्स मैजिक के साथ जनरेट कर सकते हैं और फिर लुकअप से अपने मार्चिंग क्यूब्स ज्यामिति की गणना कर सकते हैं। 3 डी वॉल्यूम बनावट (या जो भी डेटास्ट्रक्चर)।
इसलिए, पूर्वव्यापी में मुझे अपने बयान को शुरू से ही रिलेट करना चाहिए: आप बिना किसी इनपुट प्राइमेटिव के प्राइमेटिव उत्पन्न नहीं कर सकते, लेकिन आप उन्हें बिना किसी इनपुट ज्यामिति के उत्पन्न कर सकते हैं ।