मुझे एक साथ एक ही छवि में कुछ मिलाने की ज़रूरत है, यहाँ वर्णित बहुत सुंदर है: OpenGL - कई बनावट के साथ मुखौटा.
मैंने उस समाधान का उपयोग किया जो वहाँ प्रस्तावित है, लेकिन वहाँ के साथ एक समस्या है glBlendFuncSeparate
तरीका।
यह बताता है कि इस पद्धति को बाद के ओपनजीएल संस्करणों में पेश किया गया था, और मेरे अनुसार gl.h
संस्करण मैं फ़ाइल का उपयोग कर रहा हूँ 1 है।
बहुत खोज और पढ़ने के बाद मैंने महसूस किया कि यह वही है जिसके साथ मुझे काम करना है और मैं अपने ओपनगेल संस्करण को सिर्फ "अपग्रेड" नहीं कर सकता हूं।
मैं आगे गया और डाउनलोड किया GLEW
.
मैंने कहा glew.h
तथा glew.c
मेरे VS10 प्रोजेक्ट में, परिभाषित GLEW_BUILD
और अब यह आखिरकार शिकायत किए बिना संकलन करता है glBlendFuncSeparate
, लेकिन जब मैं प्रोग्राम चलाता हूं तो यह क्रैश हो जाता है, जब यह विधि को कॉल करने की कोशिश करता है Access Violation
, मुझे लगता है कि यह NULL को इंगित करता है और तब क्रैश होता है जब वह चलाया जा रहा होता है।
मैंने इस पर पढ़ना और खोजना जारी रखा, और जो मुझे समझ में आया, उसे काम करने के लिए मुझे OpenGl एक्सटेंशन्स का उपयोग करने की आवश्यकता है।
अगर में लिखा है Windows पर OpenGL एक्सटेंशन का उपयोग करना सही है तो मुझे कुछ याद आ रहा है।
मुझे लगता है मैं कहता हूँ कि सब कुछ करते हैं, मैं डाउनलोड करता हूँऔर अपने ग्राफिक्स कार्ड के लिए नवीनतम ड्राइवर और एसडीके स्थापित करें "और फिर इसे संकलित करें, भले ही यह मेरी मशीन पर चलता हो, मुझे कोई गारंटी नहीं है कि यह किसी और की मशीन पर" टी क्रैश से जीता है, क्योंकि वे ऐसा नहीं कर सकते थे। ।
मेरे पास दो प्रश्न हैं:
- क्या मुझसे कोई चूक हो रही है? यह पूरी प्रक्रिया बहुत जटिल है, और पर्यावरण पर निर्भर है।
- क्या उपयोग करने के लिए कोई विकल्प है
glBlendFuncSeparate
इस तरह के परिदृश्य में?
उत्तर:
जवाब के लिए 2 № 1आपको बताए गए ट्रिक का उपयोग करने के लिए "t need glBlendFuncSeparate (GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ZERO) की आवश्यकता है; OpenGL - कई बनावट के साथ मुखौटा। हां, आप अल्फा चैनल पर सीधे रंग जोड़ सकते हैं, जैसा कि पिछले उदाहरण में वर्णित है, लेकिन आप थोड़ा मुश्किल हो सकते हैं।
अपने मास्क को लिखने के दौरान, अल्फा को छोड़कर, सभी रंगीन चैनलों को लिखने में अक्षम करें:
glColorMask(false, false, false, true);
और पृष्ठभूमि अल्फा-चैनल पर मास्किंग अल्फा को सक्षम करें:
glBelndFunc(GL_ZERO, GL_SRC_ALPHA);
बिटमास्क लिखने के बाद, अपने glColorMask को वापस सेट न करें।
glColorMask(true, true, true, true);
// ------------------------------------------------ -------------------------------------------------- ---------------------
और हाँ, आपको अल्फा चैनल में जानकारी के साथ मास्क की आवश्यकता है:
1) यह GIMP के साथ किया जा सकता है (बहुत ही सरल, लेकिन आवश्यक GIMP पता)।
2) आप मुखौटा बनावट निर्माण से पहले अल्फा चैनल को रंग की जानकारी को आगे बढ़ाने के लिए, आप खुद को रूटीन लिख सकते हैं (यह कोड की कुछ पंक्तियां बहुत सरल है)।
3) या मुखौटा बनावट के लिए glTexImage2D में सिर्फ GL_ALPHA "प्रारूप" विशेषता का उपयोग करें। यह झंडा सिर्फ बिट अल्फा को बनावट अल्फा चैनल के लिए रंग लिखता है।