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