123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- //
- // TiledPolygonSprite.hpp
- // building
- //
- // Created by yanqian on 2023/4/17.
- //
- #ifndef TiledPolygonSprite_hpp
- #define TiledPolygonSprite_hpp
- #include "cocos2d.h"
- #include "proto_triangle.pb.h"
- #include "google/protobuf/repeated_field.h"
- #include <fstream>
- #include "2d/CustomMaterial.hpp"
- NS_CC_BEGIN
- /// 顶点数据结构
- struct TriangleVertexInfo {
- /// vertices (2F)
- Vec2 vertices;
- /// tex coords (2F)
- Tex2F texCoords;
- };
- using namespace PrototTriangle;
- class TiledPolygonSprite : public Sprite
- {
- public:
- /**
- * 创建一个多边形平铺精灵
- */
- static TiledPolygonSprite* create();
-
- const std::string& getPbvertsFile() const { return _vertsFullPath; }
-
- /**
- * 设置顶点数据
- * @param pbvertsFilePath 顶点数据文件的相对路径/绝对路径
- */
- void setPbvertsFile(const std::string& pbvertsFilePath);
-
- /**
- * 通过plist设置纹理
- * @param spriteFrameName 平铺的纹理名称
- */
- virtual void setSpriteFrame(const std::string &spriteFrameName) override;
-
- /**
- * 通过单图设置纹理
- * @param textureFrame 平铺的纹理
- */
- virtual void setSpriteFrame(SpriteFrame* textureFrame) override;
-
- /**
- * 获取纹理的大小
- */
- Size getSpSize() { return _spSize; }
- /**
- * 重写绘制方法,绘制多边形及纹理
- * @param renderer 渲染器
- * @param transform 变换矩阵
- * @param flags 渲染器标志
- */
- virtual void draw(Renderer *renderer, const Mat4 &transform, uint32_t flags) override;
-
- /**
- * 析构函数
- */
- ~TiledPolygonSprite();
-
- protected:
- /**
- * 初始化绘制所需的参数
- */
- void _initParamForRender();
-
- /**
- * 初始化着色器、VAO、VBO
- */
- void _setupVBOAndVAO();
-
- /**
- * 初始化三角形的顶点和uv数据
- */
- void _initTriangleInfo();
-
- /**
- * 计算最小包围盒
- * @param vertices 三角形的顶点列表
- * @return 左下角和右上角的坐标
- */
- std::pair<Vec2, Vec2> _calBoundingBox(const google::protobuf::RepeatedPtrField<float>& vertices);
- /**
- * 渲染器回调
- * @param transform 变换矩阵
- * @param flags 渲染器标志
- */
- void onDraw(const Mat4 &transform, uint32_t flags);
-
- /**
- * 清空顶点相关数据
- */
- void _clearVertexBuffer();
-
- private:
- int _verticesNumber = 0; // 绘制的顶点个数
-
- TriangleInfo _triangleInfo; // 顶点protobuf数据
- TriangleVertexInfo *_vertices = nullptr; // 顶点数据
- Texture2D *_texture = nullptr; // 纹理
- Size _spSize; // 纹理尺寸
- std::string _vertsFullPath; // 顶点文件的绝对路径
-
- GLuint _vao; // 顶点数组对象
- GLuint _vbo; // 顶点缓冲对象
- CustomCommand _customCommand;
-
- static GLProgram* _tiledProgram; // 着色器程序
-
- Vec2 _texRectOffset; // 图集中纹理的矩形偏移
- Vec2 _texRectSize; // 图集中纹理的尺寸信息
- };
- NS_CC_END
- #endif /* defined(TiledPolygonSprite_hpp) */
|