2010-01-10 19 views
13

शाम को हर कोई, मैं यहां मंडलियों में घूम रहा हूं लेकिन मुझे लगता है कि मैं गलत जगहों पर देख रहा हूं।ओपनजीएल बनावट लोड हो रहा है

मेरा सवाल यह है कि मैं छवि लोड करने और इसे ओपनजीएल में एक प्राइमेटिव में लागू करने के बारे में कैसे जाउंगा। उदाहरण के लिए एक बीएमपी या जेपीजी लोड करना और इसे ग्लूटोलिस्फेयर में लागू करना।

क्या समाधान एक मंच तक सीमित होगा या यह सब काम कर सकता है?

आपकी मदद

उत्तर

1

के लिए धन्यवाद यह और अधिक जटिल की तुलना में आप उम्मीद थी हो सकता है।

सबसे पहले, मुझे पूरा यकीन है कि आप glutSolidSphere का उपयोग करके खींचे गए क्षेत्र को बना नहीं सकते हैं, क्योंकि यह फ़ंक्शन खींचने वाले शीर्षकों के लिए बनावट निर्देशांक निर्दिष्ट नहीं करता है। इसलिए आपको वर्टेक्स द्वारा वर्टेक्स या वर्टेक्स बफर का उपयोग करने के लिए एक विधि को कोड करने की आवश्यकता होगी और सुनिश्चित करें कि आप प्रत्येक चरम के लिए बनावट निर्देशांक निर्दिष्ट करते हैं।

एक बार ऐसा करने के बाद, आपको अपनी छवियों को लोड करने की आवश्यकता है। ओपनजीएल फाइलों से छवियों को लोड करने के लिए फ़ंक्शंस प्रदान नहीं करता है, और अगर मुझे अच्छी तरह याद है, तो ग्लू और ग्लूट या तो नहीं। तो आपको या तो छवि फ़ाइल को स्वयं पढ़ना होगा, या ऐसा करने वाली लाइब्रेरी का उपयोग करना होगा। देविल उनमें से एक है।

एक बार जब आपके पास छवि का पिक्सेल डेटा हो, तो आपको इसका उपयोग करके एक नया ओपनजीएल बनावट बनाना होगा। कुछ छवि लोडिंग पुस्तकालय आपके लिए यह कर सकते हैं। देविल कर सकते हैं

मैं अत्यधिक कुछ ट्यूटोरियल के लिए googling की सलाह देते हैं, लेकिन कृपया नेहे ट्यूटोरियल का उपयोग न करें, उनकी गुणवत्ता आम तौर पर काफी खराब है।

2

एक छवि को एक क्षेत्र पर मानचित्र बनाने के लिए असीमित तरीके हैं। आप एक ग्लूट क्षेत्र के लिए स्वचालित रूप से बनावट निर्देशांक उत्पन्न करने के लिए gltexgen आदेशों को देख सकते हैं।

20

अच्छा, अगर आप चाहते हैं, तो आप अपना स्वयं का बीएमपी लोडर लिख सकते हैं। Here विनिर्देश और कुछ कोड है। अन्यथा, मेरे पास एक tga लोडर here होता है। एक बार ऐसा करने के बाद, यह डेटा को एक हस्ताक्षरित चरित्र सरणी में वापस कर देगा, अन्यथा GL_UNSIGNED_BYTE के रूप में जाना जाता है।

इस सरणी से ओपनजीएल बनावट बनाने के लिए, आप पहले एक चर परिभाषित करते हैं जो ओपनजीएल की स्मृति में उस बनावट के संदर्भ के रूप में कार्य करेगा।

glGenTextures(1, &textureid); 

उसके बाद, आप वर्तमान में उपयोग किया बनावट के रूप में है कि बनावट बाध्य करने के लिए की जरूरत है:

GLuint textureid; 

उसके बाद, आप एक नया बनावट के लिए जगह बनाने के लिए ओपन बताने के लिए की जरूरत है।

glBindTexture(GL_TEXTURE_2D, textureid); 

अंत में, आप ओपन बताने के लिए जहां डाटा वर्तमान बनावट के लिए है की जरूरत है।


glBindTexture(GL_TEXTURE_2D, textureid); 
glBegin(GL_QUAD); 
    glTexCoord2f(0.0, 0.0); 
    glVertex3f(0.0, 0.0, 0.0); 
    glTexCoord2f(1.0, 0.0); 
    glVertex3f(1.0, 0.0, 0.0); 
    glTexCoord2f(1.0, 1.0); 
    glVertex3f(1.0, 1.0, 0.0); 
    glTexCoord2f(0.0, 1.0); 
    glVertex3f(0.0, 1.0, 0.0); 
glEnd(); 

हालांकि, किसी भी समय आप एक आदिम करने के लिए बनावट लागू होते हैं, आप बनावट की आवश्यकता है:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, your_data); 

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

1

नेड ने इसे अच्छी तरह से वर्णित किया है। आपको NeHe से ट्यूटोरियल पढ़ना चाहिए, जहां प्रत्येक चरण को विस्तार से वर्णित किया गया है। जैसा कि अन्य ने इंगित किया है, बनावट क्वाड अच्छी शुरुआत होगी और क्षेत्र थोड़ा मुश्किल हो सकता है।

1

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

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