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__


转载于:https://www.cnblogs.com/sssssnian/p/3748652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值