根据四个点 渲染图片的Sprite

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


你可能感兴趣的:(根据四个点 渲染图片的Sprite)