2009-08-21 18 views
6

कल्पना कीजिए कि आप इन लोगों में से एक मिल गया है कि:ओपनजीएल glColorPointer रंग दोहराना?

alt text http://www.codesampler.com/d3dbook/chapter_05/chapter_05_files/image007.jpg

उर्फ ​​GL_TRIANGLE_STRIP। आप अलग अलग रंग का उपयोग कर रंग यह चाहते हैं, तो आप इस्तेमाल कर सकते हैं:

glColorPointer(4, GL_UNSIGNED_BYTE, 0, colorArray); 
glEnableClientState(GL_COLOR_ARRAY); 

कहाँ प्रत्येक "आइटम" रंग सरणी में पट्टी में एक शीर्ष बिंदु से मेल खाता है। लेकिन क्या होगा अगर रंग दो अलग-अलग रंगों के बीच वैकल्पिक हो? प्रत्येक कशेरुक के लिए रंग परिभाषित करने के लिए अनावश्यक लगता है, अगर केवल दो "असली" अलग-अलग रंग हैं। तो मेरा सवाल यह है कि अगर रंग में रंग केवल दो रंगों के साथ परिभाषित करना संभव है, और किसी भी तरह से उन दोनों के बीच ओपनएल वैकल्पिक बनाते हैं जब यह वर्टेक्स सरणी पर लूपिंग होता है।

और हाँ मैं ओपन में एक पूरा noob हूँ तो शायद यह एक बेवकूफ सवाल ...

उत्तर

3

आप OpenGL Color Index Mode का उपयोग करके ऐसा कर सकते हैं। हालांकि, ध्यान रखें कि, मेरे अनुभव में, यह वास्तव में प्रत्येक वर्टेक्स रंग को निर्दिष्ट करने के बजाय अधिकांश आधुनिक ग्राफिक्स कार्ड पर धीमा है।

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

3

आप प्रत्येक वर्टेक्स के लिए एक बूलियन ध्वज में भेजकर ऐसा करने के लिए एक कशेरुक शेडर का उपयोग कर सकते हैं कि कौन सा रंग होना चाहिए। वास्तव में सबसे सरल/सबसे तेज़ चीज शायद प्रत्येक चरम के लिए रंग जमा करने के लिए है।

यदि ओपनजीएल में कई वर्टेक्स धाराएं और सूचकांक होने की क्षमता थी जो काम कर सकती हैं (लेकिन शायद इसके लायक नहीं होंगे)।

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