CCGrid

#ifndef __EFFECTS_CCGRID_H__

#define __EFFECTS_CCGRID_H__


#include "cocoa/CCObject.h"

#include "base_nodes/CCNode.h"

#include "CCCamera.h"

#include "ccTypes.h"

#include "textures/CCTexture2D.h"

#include "CCDirector.h"

#include "kazmath/mat4.h"

#ifdef EMSCRIPTEN

#include "base_nodes/CCGLBufferedNode.h"

#endif // EMSCRIPTEN


NS_CC_BEGIN


class CCTexture2D;

class CCGrabber;

class CCGLProgram;


/**

 * @addtogroup effects

 * @{

 */


/** Base class for other

*/

class CC_DLL CCGridBase : public CCObject

{

public:

    virtual ~CCGridBase(void);


    /** whether or not the grid is active */

    inline bool isActive(void) { return m_bActive; }

    void setActive(bool bActive);


    /** number of times that the grid will be reused */

    inline int getReuseGrid(void) { return m_nReuseGrid; }

    inline void setReuseGrid(int nReuseGrid) { m_nReuseGrid = nReuseGrid; }


    /** size of the grid */

    inline const CCSize& getGridSize(void) { return m_sGridSize; }

    inline void setGridSize(const CCSize& gridSize) { m_sGridSize = gridSize; }


    /** pixels between the grids */

    inline const CCPoint& getStep(void) { return m_obStep; }

    inline void setStep(const CCPoint& step) { m_obStep = step; }


    /** is texture flipped */

    inline bool isTextureFlipped(void) { return m_bIsTextureFlipped; }

    void setTextureFlipped(bool bFlipped);


    bool initWithSize(const CCSize& gridSize, CCTexture2D *pTexture, bool bFlipped);

    bool initWithSize(const CCSize& gridSize);


    void beforeDraw(void);

    void afterDraw(CCNode *pTarget);

    virtual void blit(void);

    virtual void reuse(void);

    virtual void calculateVertexPoints(void);


public:


    /** create one Grid */

    static CCGridBase* create(const CCSize& gridSize, CCTexture2D *texture, bool flipped);

    /** create one Grid */

    static CCGridBase* create(const CCSize& gridSize);


    void set2DProjection(void);


protected:

    bool m_bActive;

    int  m_nReuseGrid;

    CCSize m_sGridSize;

    CCTexture2D *m_pTexture;

    CCPoint m_obStep;

    CCGrabber *m_pGrabber;

    bool m_bIsTextureFlipped;

    CCGLProgram* m_pShaderProgram;

    ccDirectorProjection m_directorProjection;

};


/**

 CCGrid3D is a 3D grid implementation. Each vertex has 3 dimensions: x,y,z

 */

class CC_DLL CCGrid3D : public CCGridBase

#ifdef EMSCRIPTEN

, public CCGLBufferedNode

#endif // EMSCRIPTEN

{

public:

    CCGrid3D();

    ~CCGrid3D(void);


    /** returns the vertex at a given position */

    ccVertex3F vertex(const CCPoint& pos);

    /** returns the original (non-transformed) vertex at a given position */

    ccVertex3F originalVertex(const CCPoint& pos);

    /** sets a new vertex at a given position */

    void setVertex(const CCPoint& pos, const ccVertex3F& vertex);


    virtual void blit(void);

    virtual void reuse(void);

    virtual void calculateVertexPoints(void);


public:

    /** create one Grid */

    static CCGrid3D* create(const CCSize& gridSize, CCTexture2D *pTexture, bool bFlipped);

    /** create one Grid */

    static CCGrid3D* create(const CCSize& gridSize);

    

protected:

    GLvoid *m_pTexCoordinates;

    GLvoid *m_pVertices;

    GLvoid *m_pOriginalVertices;

    GLushort *m_pIndices;

};


/**

 CCTiledGrid3D is a 3D grid implementation. It differs from Grid3D in that

 the tiles can be separated from the grid.

*/

class CC_DLL CCTiledGrid3D : public CCGridBase

#ifdef EMSCRIPTEN

, public CCGLBufferedNode

#endif // EMSCRIPTEN

{

public:

    CCTiledGrid3D();

    ~CCTiledGrid3D(void);


    /** returns the tile at the given position */

    ccQuad3 tile(const CCPoint& pos);

    /** returns the original tile (untransformed) at the given position */

    ccQuad3 originalTile(const CCPoint& pos);

    /** sets a new tile */

    void setTile(const CCPoint& pos, const ccQuad3& coords);


    virtual void blit(void);

    virtual void reuse(void);

    virtual void calculateVertexPoints(void);


public:


    /** create one Grid */

    static CCTiledGrid3D* create(const CCSize& gridSize, CCTexture2D *pTexture, bool bFlipped);

    /** create one Grid */

    static CCTiledGrid3D* create(const CCSize& gridSize);

    

protected:

    GLvoid *m_pTexCoordinates;

    GLvoid *m_pVertices;

    GLvoid *m_pOriginalVertices;

    GLushort *m_pIndices;

};


// end of effects group

/// @}


NS_CC_END


#endif // __EFFECTS_CCGRID_H__


posted @ 2014-05-21 19:05  sssssnian  阅读(246)  评论(0编辑  收藏  举报