根据四个点 渲染图片的Sprite

来源:互联网 发布:孔浩 java百度云 编辑:程序博客网 时间:2024/04/28 21:09
class QuadSprite : public CCSprite{    public:            static QuadSprite* createQuadSprite(ccVertex2F *vertexs,CCTexture2D* texture);        bool initWithVertices(ccVertex2F *vertexs);        virtual void draw();private:        // 需要提供四个点        // 顺序为    //  0     leftUp    //  1     leftDown    //  2     RightUp    //  3     RightDown    ccVertex2F mVertexs[4];};
#include "QuadSprite.h"//三角形索引const static unsigned short kIndices[6] = {0,1,2,1,3,2};const static ccVertex2F kUVS[] = {    {0.0,0.0},    {0.0,1.0},    {1.0,0.0},    {1.0,1.0}};const static unsigned char kColors[] = {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,};QuadSprite* QuadSprite::createQuadSprite(ccVertex2F* vertexs,CCTexture2D* texture){    QuadSprite* bob = new QuadSprite;    if (bob && bob->initWithTexture(texture) && bob->initWithVertices(vertexs)) {                bob->autorelease();        return bob;    }    CC_SAFE_DELETE(bob);    return NULL;}bool QuadSprite::initWithVertices(ccVertex2F *vertexs){    // 内存分配    for (int i = 0; i < 4; ++i) {        mVertexs[i].x = vertexs[i].x;        mVertexs[i].y = vertexs[i].y;    }    return true;}// 设置纹理坐标//m_sQuad.bl.texCoords.u = 0.0;//m_sQuad.bl.texCoords.v = 1.0;////m_sQuad.br.texCoords.u = 1.0;//m_sQuad.br.texCoords.v = 1.0;////m_sQuad.tl.texCoords.u = 0.0;//m_sQuad.tl.texCoords.v = 0.0;////m_sQuad.tr.texCoords.u = 1.0;//m_sQuad.tr.texCoords.v = 0.0;void QuadSprite::draw(){    CC_NODE_DRAW_SETUP();        ccGLBlendFunc( m_sBlendFunc.src, m_sBlendFunc.dst );        if (m_pobTexture != NULL)    {        ccGLBindTexture2D( m_pobTexture->getName() );    }    else    {        ccGLBindTexture2D(0);    }        //    // Attributes    //         ccGLEnableVertexAttribs(kCCVertexAttribFlag_PosColorTex);            //顶点,纹理,颜色    glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0, mVertexs);        glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, kUVS);        glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, kColors);        //根据索引draw三角形    glDrawElements(GL_TRIANGLES,6, GL_UNSIGNED_SHORT, kIndices);        CHECK_GL_ERROR_DEBUG();        CC_INCREMENT_GL_DRAWS(1);}

使用示例:

 

//    ccVertex2F mVertices[] = {//         {100,100},//         {100,50},//         {300,100},//         {300,50},//    };//    QuadSprite* qsp = QuadSprite::createQuadSprite(mVertices, mTex);//    qsp->setAnchorPoint(ccp(0, 0));//    addChild(qsp);