2010-07-30 13 views
5

तो ओपनजीएल प्रतिपादन अनुप्रयोग में, आमतौर पर एक एप्लिकेशन के पूरे जीवन में एक कशेरुक बफर बनाने और बनाए रखना बेहतर होता है और केवल प्रत्येक फ्रेम को glBufferData के साथ डेटा स्वैप कर देता है, या यह केवल VBO को हटाने के लिए बेहतर है और इसे हर फ्रेम फिर से बनाएं?नए वीबीओ बनाने के लिए बेहतर है या बस डेटा स्वैप करें? (ओपनजीएल)

अंतर्ज्ञान मुझे बताता है कि डेटा को स्वैप करना बेहतर है, लेकिन मैंने देखा कुछ नमूना कार्यक्रम बाद वाले हैं, इसलिए मैं उलझन में हूं।

मैंने वीबीओ पर एनवीडिया के श्वेतपत्र को पढ़ा, लेकिन जैसा कि मैं ओपनजी के लिए नौसिखिया हूं, इसने पूरी तरह से समझ नहीं ली।

के लिए अग्रिम और सलाह

उत्तर

5

आप डेटा के एक नया सेट प्रत्येक फ्रेम प्रलेखन संकेत मिलता है कि GL_STREAM_DRAW चीजों के बारे में जाने के लिए सही तरीका है लगता है जेनरेट कर रहे हैं के बाद से धन्यवाद।

0

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

तो आदर्श मामला एक बार वीबीओ में सभी आवश्यक डेटा प्रस्तुत करना है और उसके बाद केवल मैट्रिक्स रूपांतरण या शेडर्स के माध्यम से ओपनजीएल कार्यों के माध्यम से उन्हें कुशल बनाना है।

तो आप उदा। प्रत्येक जाल के विश्व अंतरिक्ष निर्देशांक और बनावट को वीबीओ में बनाते हैं और उन्हें फिर से सीधे स्पर्श नहीं करते हैं; आप उन्हें प्रस्तुत करने के लिए मॉडलव्यू मैट्रिक्स, प्रकाश कार्यों और शेडर्स का उपयोग करेंगे।

आप वीबीओ उपयोग को अनुकूलित करने के लिए और अधिक कर सकते हैं, लेकिन मूल बातें हैं क्योंकि मैंने उन्हें समझा है।

कुछ अच्छे संकेत और अधिक जानकारी यहां प्राप्त करें: How do I use OpenGL 3.x VBOs to render a dynamic world?

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