2010-09-03 13 views
5

मैं अल्फा चैनल के साथ कुछ बनावट खींच रहा हूं, लेकिन जब वे प्रदर्शित होते हैं तो ऐसा लगता है कि अल्फा चैनल केवल बाइनरी है। तो एक पिक्सेल या तो पारदर्शी या अपारदर्शी है, हालांकि बनावट फ़ाइल में स्वयं पिक्सेल आधा पारदर्शी है। मिश्रण इस तरह स्थापित किया गया है:एंड्रॉइड/ओपनल्स अल्फा बनावट semitransparent नहीं लेकिन बाइनरी पारदर्शी

gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 

क्या इस समस्या के लिए कोई समाधान है?

ऊपर से पता चलता है कि यह कैसे की तरह होना चाहिए, और नीचे से पता चलता है कि यह कैसे है:

alt text

+0

क्या internalFormat आपको लगता है कि बनावट में उपयोग कर रहे हैं? –

+0

पारदर्शिता के साथ पीएनजी – clamp

+0

क्या मुझे पीएनजी पर अधिक जानकारी मिल सकती है? यह कैसे बचाया गया था? –

उत्तर

3

इस प्रयास करें:

gl.glEnable(GL10.GL_BLEND);  
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

gl.glEnable(GL10.GL_ALPHA_BITS); 
//draw... 
gl.glDisable(GL10.GL_ALPHA_BITS); 
+0

इसके लिए धन्यवाद। हालांकि मेरे मामले में यह GL_ALPHA_BITS कॉल के बिना भी काम कर रहा है –

1

ऐसा लगता है जैसे कि यह अल्फ़ा परीक्षण के बजाय अल्फा सम्मिश्रण है, जो थ्रेशोल्डिंग व्यवहार की व्याख्या करता है उपयोग कर रहा है।

gl.glDisable(GL10.GL_ALPHA_TEST); 
+0

अल्फा परीक्षण पहले से ही अक्षम है और मैं उन सभी ऑब्जेक्ट्स को गहराई से सॉर्ट करता हूं जिन्हें मैं चित्रित कर रहा हूं – clamp

0

क्या सतह प्रारूप है कि आप अपने GLSurfaceView के लिए उपयोग कर रहे हैं: यद्यपि यह डिफ़ॉल्ट रूप से सक्षम नहीं है, यह कोशिश करने के लिए लायक हो सकता है? क्या यह एक पारदर्शी (पारदर्शी नहीं) प्रारूप है?

surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

इसके अलावा ईजीएल सेटिंग्स में अल्फा समर्थन सेट होना चाहिए। यह आपको गुणवत्ता का सबसे अच्छा दे देंगे ...

surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

संपादित करें: एक और सोचा कि शायद आप glTexImage2D साथ एक पारदर्शी प्रारूप में ओपन पर चित्र अपलोड नहीं किया है?

0

क्या आप पीएनजी को जीएल बनावट में संग्रहीत कर रहे हैं जिसमें केवल 1 बिट अल्फा है, जैसे कि 16-बिट 5-5-5-1 प्रारूप? इससे उपरोक्त व्यवहार होगा।

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