मैंने सफलतापूर्वक एक बहु-बनावट बहुभुज खींचा है लेकिन दुर्भाग्य से ओवरलेइंग बनावट का पहला पिक्सेल पूरे बनावट क्षेत्र में उपयोग किया जा रहा है।ओपनजीएल, जीएलएमओयूडलेट और मल्टीटेक्चरिंग
परिणाम यह है::
केवल शीर्ष पर लाल पिक्सेल किया जा रहा है
यहाँ बनावट (GL_TEXTURE0 और GL_TEXTURE1) कर रहे हैं। मैंने शीर्ष पर केवल 1x1 नीली पिक्सेल के साथ प्रयास किया है और मुझे नीली ओवरले के साथ एक ही परिणाम मिलता है।
मेरे कोड:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisableClientState(GL_COLOR_ARRAY);
const CGPoint vertices[] = {
ccp(0,0),
ccp(100,0),
ccp(0,100),
ccp(100,100),
};
// This will flip the image for us as well
const CGPoint coordinates[] = {
ccp(0,1),
ccp(1,1),
ccp(0,0),
ccp(1,0),
};
// Config multitextures
glClientActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, icon.name);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
glEnable(GL_TEXTURE_2D);
glClientActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, overlay.name);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
glEnable(GL_TEXTURE_2D);
GLubyte points = 4;
// Draw the square
glVertexPointer(2, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, points);
// Revert back
glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_2D);
// glClientActiveTexture(GL_TEXTURE0); // breaks multitexturing
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_COLOR_ARRAY);
यह एक ओपन समस्या है, लेकिन आईओएस परियोजना उन दिलचस्पी के लिए यहाँ उपलब्ध है: http://dl.dropbox.com/u/33811812/cocos2d/OpenGLTest.zip
संपादित करें: से लाल किताब:
यदि आप multitexturing हैं और आप glTexCoord *() का उपयोग करते हैं, तो आप बनावट बना रहे हैं पहली बनावट इकाई के लिए rdinates। दूसरे शब्दों में, कैसे निर्देशांक की एक सरणी पारित करने के लिए के रूप में उपयोग करते हुए glTexCoord *() glMultiTexCoord * का उपयोग कर के बराबर है (GL_TEXTURE0, ...)
किसी भी संकेत? ओपनजीएल ईएस 1.1 ग्लोबजिन() इत्यादि का समर्थन नहीं करता है
ऐसा लगता है आप के लिए [glClientActiveTexture] (http://www.opengl.org/sdk/docs/man/xhtml/glClientActiveTexture.xml) देख रहे हैं। –
शानदार! काम करता है, उस सेटिंग को छोड़कर 'glClientActiveTexture (GL_TEXTURE0);' ड्राइंग के बाद यह फिर से विफल हो जाता है। मेरे पास अन्य ड्रॉ विधियां हैं जिन्हें मुझे राज्यों को वापस करने की आवश्यकता है। यह कैसे हासिल किया जा सकता है? –
मैंने 'glVertexAttribPointer' को भी देखा है लेकिन मुझे कोई संकेत नहीं है कि GL_TEXTURE1 के लिए निर्देशांक निर्दिष्ट करने के लिए इसका उपयोग कैसे करें ... –