如何在cocos2dx中绘制缩进(凹面)实心多边形

时间:2014-09-17 12:17:09

标签: c++ ios cocos2d-x draw

我需要绘制带有一些顶点的凹进(凹)实心多边形。 我用

void HelloWorld::draw(void)
{ 
    CCPoint vertices[5] = {ccp(200, 200), ccp(400, 400), ccp(200, 600), ccp(500, 600), ccp(500, 200)};
    ccDrawSolidPoly(vertices, 5, ccc4f(0.7f, 0.7f, 0.7f, 0.5f));
}

并获得内部带有三角形的Rectangle。 但我希望缩进(凹)实心多边形如图所示

obtained and expected

2 个答案:

答案 0 :(得分:3)

尝试使用drawPolygon function in CCDrawNode

void drawPolygon(CCPoint* verts, unsigned int count, const ccColor4F &fillColor,
                         float  borderWidth, const ccColor4F& borderColor)

这是一个例子

CCPoint vertices[5] = {ccp(200, 200), ccp(400, 400), ccp(200, 600), ccp(500, 600), ccp(500, 200)};
CCDrawNode* polygon = CCDrawNode::create();
//creating red polygon with thin black border
polygon->drawPolygon(vertices, 5, ccc4f(1, 0, 0, 1), 1, ccc4f(0, 0, 0, 1));
addChild(polygon);

我希望它有效

答案 1 :(得分:3)

如果不修改Cocos2d引擎,您可以通过从ccp(400,400)启动数组或再添加一个ccp(500,400)来获得所需形式的多边形!然后你的点数应该从这一点开始,就像我附上的图片一样。

原因是cocos2d在绘制复杂多边形时默认使用GL_TRIANGLE_FAN标志。这意味着多边形中三角形中的所有点都将相对于点数组中的第一个点构建。

您可以转到CCDrawNode.cpp文件并用GL_TRIANGLE_SPLIT替换此标志。要知道更多只是谷歌这两个标志。