|
- ManualVertices = class("ManualVertices")
-
- function ManualVertices:ctor(vertexFormat)
- -- 自动计算的包围盒
- self._boundingBox = nil;
- -- 顶点缓冲区
- self._vertices = {};
- -- 顶点格式
- self._vertexFormat = vertexFormat;
-
- self._vertexElementOffset = {};
- self._vertexElementSize = {};
-
- -- 顶点的float元素个数
- self._vertexSize = 0;
- for i , v in ipairs(self._vertexFormat) do
- self._vertexElementOffset[v.usage] = self._vertexSize + 1;
- self._vertexElementSize[v.usage] = self._vertexSize;
- self._vertexSize = self._vertexSize + v.size
- end
-
- -- 当前颜色
- self._color = cc.c4f(1,1,1,1);
- end
-
- local function createVertex(num)
- local vertex = {};
- for i = 1 , num do
- table.insert(vertex , 0);
- end
- return vertex
- end
-
- function ManualVertices:setVertexPos(vertex , pos)
- local offset = self._vertexElementOffset[cc.VertexFormatUsage.POSITION];
- vertex[offset] = pos.x or 0;
- vertex[offset + 1] = pos.y or 0;
- vertex[offset + 2] = pos.z or 0;
- end
-
- function ManualVertices:setVertexColor(vertex , color)
- local offset = self._vertexElementOffset[cc.VertexFormatUsage.COLOR];
- vertex[offset] = color.r or 0;
- vertex[offset + 1] = color.g or 0;
- vertex[offset + 2] = color.b or 0;
- vertex[offset + 3] = color.a or 0;
- end
-
- function ManualVertices:insertVertex(vertex)
- local offset = self._vertexElementOffset[cc.VertexFormatUsage.POSITION];
- local pos = cc.vec3(vertex[offset] , vertex[offset + 1] , vertex[offset + 2]);
- if self._boundingBox == nil then
- self._boundingBox = cc.BoundingBox:new(pos , pos);
- end
- self._boundingBox:merge(pos);
-
- for i , v in ipairs(vertex) do
- table.insert(self._vertices , v);
- end
- end
-
- function ManualVertices:createVertex()
- local vertex = createVertex(self._vertexSize);
- self:setVertexColor(vertex , self._color);
- return vertex;
- end
-
- -- 获取顶点数据
- function ManualVertices:getVertices()
- return self._vertices;
- end
-
- -- 获得顶点个数
- function ManualVertices:getVertexCount()
- return #self._vertices / self._vertexSize;
- end
-
-
- -- 获取包围盒
- function ManualVertices:getBoundingBox()
- return self._boundingBox;
- end
-
- -- 设置当前颜色
- function ManualVertices:setColor(color)
- self._color = color;
- end
-
- -- 画一根线
- function ManualVertices:drawLine(startPos , endPos)
- local vertex;
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , startPos);
- self:insertVertex(vertex);
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , endPos);
- self:insertVertex(vertex);
- end
-
- -- 画一个矩形
- function ManualVertices:drawRect(leftTop , rightTop , leftBottom , rightBottom)
- local vertex;
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , leftTop);
- self:insertVertex(vertex);
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , rightTop);
- self:insertVertex(vertex);
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , leftBottom);
- self:insertVertex(vertex);
-
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , leftBottom);
- self:insertVertex(vertex);
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , rightTop);
- self:insertVertex(vertex);
-
- vertex = self:createVertex();
- self:setVertexPos(vertex , rightBottom);
- self:insertVertex(vertex);
- end
|