gpt4 book ai didi

ios - 在 CCRenderTexture 中使用 OpenGL ES 2.0

转载 作者:行者123 更新时间:2023-11-29 11:13:32 25 4
gpt4 key购买 nike

我正在尝试学习 Ray Wenderlich 的 iOS 动态纹理教程

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

但使用 Cocos2D 2.0 和 OpenGL ES 2.0 而不是 1.1。本教程首先在屏幕上绘制一个应用了阴影渐变的彩色方 block ,但我无法将渐变渲染到彩色方 block 。教程的这一部分是将 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 beginend 方法之间(完整代码可以在上面的链接中找到)。我的 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 对象。控制台中没有错误,但屏幕上的图像是没有渐变的纯色方 block 。我是否需要使用 OpenGL 混合功能?任何帮助将非常感激。提前致谢。

最佳答案

我已经弄清楚了让它工作所需的更改,并且我在教程的论坛上发表了我的评论 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 附带的着色器或编写自定义但简单的着色器。我提供了两种可供选择的方法。

希望这对您有所帮助!

关于ios - 在 CCRenderTexture 中使用 OpenGL ES 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com