请问cocos creator支持自定义的Sprite 渲染吗?比如传递一组顶点数据,渲染一块由这些点构成的地形. 以前在cocos2d-x中是通过自定义onDraw实现可以的.

下面这是老的cocos2d-x 的实现方法:

void TerrainSprite::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
_customCmd.init(_globalZOrder, transform, flags);
_customCmd.func = CC_CALLBACK_0(TerrainSprite::onDraw, this, transform, flags);
renderer->addCommand(&_customCmd);
}

void TerrainSprite::onDraw(const Mat4 &transform, uint32_t flags)
{
getGLProgramState()->apply(transform);
glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)_triangles.size());
CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, _triangles.size());
}

void TerrainSprite::refreshTriangle(const std::vector& points, Rect rectLimit)
{

}

void TerrainSprite::flushTriangle()
{
if(_triangles.size()==0){
return;
}

getGLProgramState()->setVertexAttribPointer("a_position", 2, GL_FLOAT, GL_FALSE, sizeof(Vec2), &_triangles[0]);  // ��������

if (_bUserTexCoord)
{
    getGLProgramState()->setVertexAttribPointer("a_texCoord", 2, GL_FLOAT, GL_FALSE, sizeof(Vec2), &_texCoords[0]); // ��������
}

}

这样的一个自定义的Sprite,给它传递一个_triangles数组,里面是几十个点进行渲染。
请问如果用 cocos creator 实现,请问怎么实现比较好?

顶一下。。。:joy:
老的cocos2d-x 的onDraw 在目前的cocos creator 引擎框架下完全没法用了嘛?

那你要去看看 WebGL有没有办法咯。

看啦一下webgl 渲染,好像不可以的

可以试试这个

跟这个关系不大。 是类似这样的。

//log(“bottom first:%d, end:%d”, firstS, endS);
//Vec2 pntdraw;
for (std::size_t i = firstS; i < pointssize; ++i)
{
if (i>endS)
{
break;
}
pt.x = points[i].x;

    //if(_isFlipY)
    // pt.y = rectLimit.getMaxY();

    //if (pntdraw != Vec2())
    //{
    //dn->drawLine(pntdraw, pt,Color4F::RED);
    //}
    _triangles.push_back(pt);
    _triangles.push_back(points[i]);

    //pntdraw = points[i];
    //dn->drawLine(pt, points[i], Color4F::RED);
}
_bUserTexCoord = false;
//_firstS = firstS;
TerrainSprite::flushTriangle();

就是可以改变renderData的vbuf的里面的数据。数据是需要动态的改变的,

https://github.com/cocos-creator/demo-shader
首页都在讨论

谢谢~,好像改下Material就可以