2011-12-19 22 views
5

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

यह बहु-बनावट के समान है लेकिन दूसरे बनावट के बजाय रंग के साथ है। इसे कैसे करें?

(अपडेटेड) मैंने बनावट संयोजक सेट अप करने का प्रयास किया है। रंग ठीक टिंटेड है, लेकिन अल्फा के साथ समस्या है - यह बनावट (मास्क की तरह) से मूल्य नहीं लेता है। इस पल में मेरे कोड:

glActiveTexture (GL_TEXTURE0); // do we need stage #1? 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_SRC_ALPHA); 
// this doesn't work for alpha: 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 

स्क्रीनशॉट:

नहीं tinting:

enter image description here

RGBA साथ टिंट = (0, 0.5, 1, 0.5):

enter image description here

+0

आपका कोड मेरे लिए सही लगता है। क्या आप अल्फा समस्या का एक स्क्रीनशॉट संलग्न कर सकते हैं या वर्णन कर सकते हैं कि इसके साथ क्या बुरा है। – iHunter

+0

क्या आप बनावट को स्वयं अपलोड कर सकते हैं? –

+0

इसके अलावा, कोड प्रस्तुत करना? –

उत्तर

0

क्या आपने कोशिश की है glEnable (GL_BLEND) के साथ उपरोक्त कोड?

+0

यह हमेशा सक्षम है। – brigadir

0

आप पारदर्शिता पर OpenGL documentation पढ़ना चाहेंगे, 15.020: "मैं पारदर्शी प्रभाव कैसे प्राप्त कर सकता हूं?"

सुनिश्चित करें कि आप सही क्रम में दृश्य प्रस्तुत कर रहे हैं (आपका उत्तर कोई प्रतिपादन नहीं दिखाता है)।

सुनिश्चित करें कि आप वांछित मिश्रण फ़ंक्शन का उपयोग कर रहे हैं।

एक और सुझाव जो मैं कर सकता हूं shaders का उपयोग शुरू करना है। जब मैं उनका उपयोग करता हूं तो मैं हमेशा नियंत्रण में थोड़ा अधिक महसूस करता हूं।

0

मुझे वही परिणाम मिलते हैं (एंड्रॉइड सैमसंग गैलेक्सी एस पर चल रहा है, इसके लायक होने के लिए)। मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है। दस्तावेज़ उचित रूप से स्पष्ट प्रतीत होते हैं।

मेरे लिए यह काम करता है अगर मैं आरजीबी के लिए GL_MODULATE का उपयोग करता हूं। यदि मैं GL_ADD या GL_ADD_SIGNED का उपयोग करता हूं तो यह फिर से विफल हो जाता है। अल्फा पर GL_MODULATE का उपयोग करने से भी आरजीबी पर उन मोडों का उपयोग करते समय वही गलत व्यवहार मिलता है। आप उन्हें अपने रंगों को बदलने के बजाय अपने रंगों को मॉड्यूल करने के साथ फंस सकते हैं।

सारांश में, यह मेरे लिए काम करता है:

glActiveTexture (GL_TEXTURE0); // do we need stage #1? 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_); 

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 
+0

हां, मॉड्यूलेट मोड के साथ सभी सही तरीके से काम करते हैं, लेकिन ऐसा लगता है कि मैं नहीं चाहता हूं। मैं इसे ढीला करने के लिए यहां +50 डाल दूंगा। – brigadir

+0

उपहार के लिए धन्यवाद। क्षमा करें मैं और मदद नहीं कर सका। –

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