我正在尝试通过Ray Wenderlich的iOS动态纹理教程
http://www.raywenderlich.com/3857/how-to-create-dynamic-textures-with-ccrendertexture
但使用Cocos2D 2.0和OpenGL ES 2.0而不是1.1。本教程首先在屏幕上绘制一个彩色方块,并在其上应用阴影渐变,但我无法将渐变渲染到彩色方块。本教程的这一部分是将OpenGL ES代码发送到CCRenderTexture的地方,所以我认为我必须设置我的OpenGL ES 2.0代码错误(我对OpenGL / OpenGL ES的经验很少)。 OpenGL ES 1.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);
介于CCRenderTexture begin
和end
方法之间(完整代码可在上面的链接中找到)。我的Cocos2D 2.0 / OpenGL ES 2.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混合功能?任何帮助将非常感激。提前谢谢。
答案 0 :(得分:2)
我已经找到了让它发挥作用所需的更改,我在教程的论坛中发表了我的评论http://www.raywenderlich.com/forums//viewtopic.php?f=20&t=512&start=40 希望对你来说还不算太晚。
为了节省您浏览论坛以查找我的帖子的时间,这是我在那里发布的内容:
我发布了我的修复: http://www.wfu.edu/~ylwong/download/cocos2d-2.0-texture/ HelloWorldLayer.mm是包含所有更改的最终文件,因此您无需键入它们.pdf文件会标记更改,以防您想要查看更改内容。
基本上,除了替换OpenGLES 2.0中不支持的语句之外,我还必须添加代码来设置顶点和片段的着色器。此外,不是在顶点数组中使用范围0到textureSize,我必须使用范围-1到1,这意味着在设置顶点数组时,纹理宽度现在为2,0变为-1,而textureSize变成1。
要为该教程设置着色器,我们可以使用Cocos2d附带的着色器或编写自定义但简单的着色器。我已经包含了两种方法可供选择。
希望这有帮助!