1

RayWenderlichによるiOSのダイナミックテクスチャに関するチュートリアルに従おうとしています

http://www.raywenderlich.com/3857/how-to-create-dynamic-textures-with-ccrendertexture

ただし、1.1の代わりにCocos2D2.0とOpenGLES2.0を使用します。チュートリアルは、影のグラデーションが適用された色付きの正方形を画面に描画することから始まりますが、色付きの正方形にグラデーションをレンダリングすることはできません。チュートリアルのこの部分では、OpenGL ESコードがCCRenderTextureに送信されるため、OpenGL ES 2.0コードを間違って設定している必要があると思います(OpenGL / OpenGL ESの経験はほとんどありません)。OpenGLES1.1コードは

glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

float gradientAlpha = 0.7;    
CGPoint vertices[4];
ccColor4F colors[4];
int nVertices = 0;

vertices[nVertices] = CGPointMake(0, 0);
colors[nVertices++] = (ccColor4F){0, 0, 0, 0 };
vertices[nVertices] = CGPointMake(textureSize, 0);
colors[nVertices++] = (ccColor4F){0, 0, 0, 0};
vertices[nVertices] = CGPointMake(0, textureSize);
colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};
vertices[nVertices] = CGPointMake(textureSize, textureSize);
colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};

glVertexPointer(2, GL_FLOAT, 0, vertices);
glColorPointer(4, GL_FLOAT, 0, colors);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);

これはCCRenderTexturebeginendメソッドの間にあります(完全なコードは上記のリンクにあります)。私のCocos2D2.0/ OpenGLES2.0の試みは

float gradientAlpha = 0.7;    
CGPoint vertices[4];
ccColor4F colors[4];
int nVertices = 0;

vertices[nVertices] = CGPointMake(0, 0);
colors[nVertices++] = (ccColor4F){0, 0, 0, 0 };

vertices[nVertices] = CGPointMake(textureSize, 0);
colors[nVertices++] = (ccColor4F){0, 0, 0, 0};
vertices[nVertices] = CGPointMake(0, textureSize);
colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};
vertices[nVertices] = CGPointMake(textureSize, textureSize);
colors[nVertices++] = (ccColor4F){0, 0, 0, gradientAlpha};

// Setup OpenGl ES shader programs

CCGLProgram *positionColourProgram = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionColor];

[rt setShaderProgram:positionColourProgram];

ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color);

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_FALSE, 0, colors);

glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);

ここrtで、CCRenderTextureオブジェクトです。コンソールにエラーはありませんが、画面上の画像はグラデーションのない単色の正方形です。おそらくOpenGLブレンディング関数を使用する必要がありますか?どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1