【发布时间】:2014-05-30 08:55:49
【问题描述】:
想要创建纹理地图,但此代码似乎无法正常工作。我认为openGL部分不起作用。可能我错过了一些东西,我正在尝试制作像地图一样的小翼并通过教程: http://www.raywenderlich.com/33266/how-to-create-dynamic-textures-with-ccrendertexture-in-cocos2d-2-x。 以下代码假设给出条纹背景的输出请检查链接。
RenderTexture* rt = RenderTexture::create(textureWidth, textureHeight);
rt->beginWithClear(color1.r, color1.g, color1.b, color1.a);
Point* vertices = (Point*)calloc(nStrips * 6, sizeof(Point));;
Color4F* colors = (Color4F*)calloc(nStrips * 6, sizeof(Color4F));
setShaderProgram(ShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionColor));
CC_NODE_DRAW_SETUP();
int nVertices = 0;
float x1 = -textureHeight;
float x2;
float y1 = textureHeight;
float y2 = 0;
float dx = textureWidth / nStrips;
float stripeWidth = dx / 2;
for (int i = 0; i<nStrips; i++) {
x2 = x1 + textureHeight;
vertices[nVertices] = Point(x1, y1);
colors[nVertices++] = Color4F(color2.r, color2.g, color2.b, color2.a);
vertices[nVertices] = Point(x1 + stripeWidth, y1);
colors[nVertices++] = Color4F(color2.r, color2.g, color2.b, color2.a);
vertices[nVertices] = Point(x2, y2);
colors[nVertices++] = Color4F(color2.r, color2.g, color2.b, color2.a);
vertices[nVertices] = vertices[nVertices - 2];
colors[nVertices++] = Color4F(color2.r, color2.g, color2.b, color2.a);
vertices[nVertices] = vertices[nVertices - 2];
colors[nVertices++] = Color4F(color2.r, color2.g, color2.b, color2.a);
vertices[nVertices] = Point(x2 + stripeWidth, y2);
colors[nVertices++] = Color4F(color2.r, color2.g, color2.b, color2.a);
x1 += dx;
}
Sprite* noise = Sprite::create("Noise.png");
BlendFunc blendFunc;
blendFunc.src = GL_DST_COLOR;
blendFunc.dst = GL_ZERO;
noise->setBlendFunc(blendFunc);
noise->setPosition(Point(textureWidth / 2, textureHeight / 2));
noise->visit();
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, vertices);
glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_FLOAT, GL_TRUE, 0, colors);
glDrawArrays(GL_TRIANGLES, 0, (GLsizei)nVertices);
rt->end();
return Sprite::createWithTexture(rt->getSprite()->getTexture());
【问题讨论】:
-
好吧,你不需要创建一个新的精灵来返回。你可以做
rt->getSprite() -
你最终找到答案了吗?
-
没有人回答还在等待!!!!
-
请回答或提供任何提示,以便我处理它...