gpt4 book ai didi

cocos2d-iphone - Cocos2dx CCRenderTexture - OpenGL ES2 未呈现

转载 作者:行者123 更新时间:2023-12-04 06:45:04 28 4
gpt4 key购买 nike

我正在尝试在 Cocos2dx 2、OpenGL ES2 中为纹理添加渐变。但是 OpenGL 内容没有被渲染。

此代码基于教程链接: http://www.raywenderlich.com/3857/how-to-create-dynamic-textures-with-ccrendertexture

CCRenderTexture *rt = CCRenderTexture::create((int)textureSize, (int)textureSize);
rt->beginWithClear(bgColor.r, bgColor.g, bgColor.b, bgColor.a);

float gradientAlpha = 0.5;
CCPoint vertices[4];
ccColor4F colors[4];
int nVertices = 0;

vertices[nVertices] = CCPointMake(0, 0);
colors[nVertices++] = ccc4f(0, 0, 0, 0);
vertices[nVertices] = CCPointMake(textureSize, 0);
colors[nVertices++] = ccc4f(0, 0, 0, 0);
vertices[nVertices] = CCPointMake(0, textureSize);
colors[nVertices++] = ccc4f(0, 0, 0, gradientAlpha);
vertices[nVertices] = CCPointMake(textureSize, textureSize);
colors[nVertices++] = ccc4f(0, 0, 0, gradientAlpha);

// Set the shader program for OpenGL
setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionColor));
CC_NODE_DRAW_SETUP();

glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_FALSE, 0, colors);
ccGLBlendFunc(CC_BLEND_SRC, CC_BLEND_DST);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);

CCSprite* noise = CCSprite::create("Noise.png");
ccBlendFunc blendFunc;
blendFunc.src = GL_DST_COLOR;
blendFunc.dst = GL_ZERO;
noise->setBlendFunc(blendFunc);
noise->setPosition(ccp(textureSize / 2, textureSize / 2));
noise->visit();

rt->end();
return CCSprite::createWithTexture(rt->getSprite()->getTexture());

如果我做错了什么,请告诉我。谢谢。

最佳答案

看起来我们必须为顶点使用 ccVertex2F 而不是 CCPoint。

此外,绘制渐变并不明确需要混合函数。

这是更新后的 C++ 代码:

float gradientAlpha = 0.5;
ccVertex2F vertices[4];
ccColor4F colors[4];
int nVertices = 0;

vertices[nVertices] = vertex2(0, 0);
colors[nVertices++] = ccc4f(0, 0, 0, 0);
vertices[nVertices] = vertex2(textureSize, 0);
colors[nVertices++] = ccc4f(0, 0, 0, 0);
vertices[nVertices] = vertex2(0, textureSize);
colors[nVertices++] = ccc4f(0, 0, 0, gradientAlpha);
vertices[nVertices] = vertex2(textureSize, textureSize);
colors[nVertices++] = ccc4f(0, 0, 0, gradientAlpha);

// Set the shader program for OpenGL
setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionColor));
CC_NODE_DRAW_SETUP();

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);

关于cocos2d-iphone - Cocos2dx CCRenderTexture - OpenGL ES2 未呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261926/

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