マルチテクスチャポリゴンの描画に成功しましたが、残念ながら、オーバーレイテクスチャの最初のピクセルのみがテクスチャ領域全体で使用されています。
テクスチャ(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);
これはOpenGLの問題ですが、iOSプロジェクトは、興味のある方はこちらから入手できます:http: //dl.dropbox.com/u/33811812/cocos2d/OpenGLTest.zip
編集: レッドブックから:
マルチテクスチャリングを行っていて、glTexCoord *()を使用している場合は、最初のテクスチャユニットのテクスチャ座標を設定しています。つまり、glTexCoord *()を使用することは、glMultiTexCoord *(GL_TEXTURE0、...)を使用することと同じです。
座標の配列を渡す方法に関するヒントはありますか?OpenGL ES 1.1はglBegin()などをサポートしていません。