2010-01-25 16 views
5

के साथ अल्फा मास्क मैं ओपनजीएल में अल्फा मास्क का उपयोग करना चाहता हूं ताकि सफेद (1) = दृश्यमान और काला (0) = छुपा हुआ हो।ओपनजीएल

तो मैं क्या करता हूं मैं glColorMask(False, False, False, True) (मैं पाइथन का उपयोग कर रहा हूं) का उपयोग करके फ्रेमबफर के अल्फा घटक में कुछ लिखता हूं और फिर मिश्रण का उपयोग करके इसके ऊपर कुछ ज्यामिति खींचता हूं।

लेकिन यह काम नहीं कर रहा है: मैंने 0 से अल्फा बफर भरने की कोशिश की और फिर कुछ ज्यामिति खींचना जो इस प्रकार दिखाई नहीं देनी चाहिए। लेकिन यह हमेशा दिखाता है, अल्फा बफर पूरी तरह से अनदेखा किया जाता है।

# Clear alpha buffer to 0, and clear color buffer. 
# After this, the alpha buffer should probaby be filled with 0. 
glClearColor(0, 0, 0, 0) 
glClear(GL_COLOR_BUFFER_BIT) 

# Disable blending. 
glDisable(GL_BLEND) 

# Disable color writing. 
glColorMask(False, False, False, True) 

# Set color to a white with alpha 0. 
glColor4f(1, 1, 1, 0) 

# Now draw a fullscreen quad. 
# After this, the alpha buffer should really be filled with 0. 
# Shouldn't it? 
glBegin(GL_QUADS) 
glVertex2f(0, 0) 
glVertex2f(320, 0) 
glVertex2f(320, 480) 
glVertex2f(0, 480) 
glEnd() 

# Enable color writing. 
glColorMask(True, True, True, True) 

# Enable blending so that incoming fragments are multiplied 
# by alpha values already in the buffer. 
glEnable(GL_BLEND) 
glBlendFunc(GL_DST_ALPHA, GL_ONE) 

# Set color to a white with alpha 1. 
glColor4f(1, 1, 1, 1)  

# Now draw a triangle. 
# It should not be visible because alpha in framebuffer is 0 
# and 0 * 1 = 0. 
glBegin(GL_TRIANGLES) 
glVertex2f(20, 50) 
glVertex2f(300, 50) 
glVertex2f(160, 210) 
glEnd() 

(हाँ, प्रक्षेपण मैट्रिक्स ठीक कह रहे हैं तो मेरी स्क्रीन 320/240 के लिए 0/0 से लेकर।)

त्रिकोण दिखाई दे, क्या मैं गलत क्या किया नहीं होना चाहिए?

+1

अंतिम परिणाम एक काला पृष्ठभूमि पर एक सफेद त्रिकोण है? मैं आपके कदमों में कुछ भी दोषपूर्ण नहीं दिखता हूं। – Bahbar

उत्तर

3

जब आप पहले से नहीं हैं, तो अपना जीएल संदर्भ बनाते समय alpha buffer मांगने का प्रयास करें।

+0

वह समस्या का सामना कर रहा था! आपका बहुत बहुत धन्यवाद! – abenthy

0

glAlphaFunc (GL_GREATER, 0.5) का उपयोग करें;

+0

गलती ... वह मिश्रण का उपयोग कर रहा है, अल्फा परीक्षण नहीं। अल्फा परीक्षण स्रोत अल्फा के खिलाफ काम करता है, न कि गंतव्य अल्फा। – Bahbar