有没有办法用Box2D创建一个多边形,通过定义顶点及其指数?
因为我正在使用openGL,所以我必须定义顶点和索引,我很惊讶Box2D中没有办法像我通常创建网格一样创建一个体(形状)。我错过了什么,或者这通常是以不同的方式完成的吗?
答案 0 :(得分:0)
在AS3中,可以使用B2D 2.1a版本完成。
package org.pf.constructor.shapes
{
import Box2D.Collision.Shapes.b2PolygonShape;
import Box2D.Common.Math.b2Vec2;
/**
* ...
* @author zeksa'
*/
public class PFb2dConvexShape extends b2PolygonShape
{
private var _vertices:Array = new Array();
public function PFb2dConvexShape(vertices:Array)
{
for (var i:int = 0; i < vertices.length; i++)
{
_vertices.push(new b2Vec2(vertices[i][0] / 30, vertices[i][1] / 30));
}
SetAsArray(_vertices, _vertices.length);
}
}
}
我已经这样做了。认为你可以在C ++上做同样的事情。 Box2D仅支持凸形。如果你想要凹形,我认为this article会帮助你,AS3只有=)。希望您能了解如何在C ++上执行此操作。 玩得开心!
答案 1 :(得分:0)
您应该查看poly2tri库:http://code.google.com/p/poly2tri/
执行约束Delaunay三角剖分(http://en.m.wikipedia.org/wiki/Constrained_Delaunay_triangulation)是一个非常快速有效的库。 它从你的输入顶点输出一个三角形图(最后是Steiner点,但是你必须自己计算它们才能得到精致的Delaunay,或者使用lib的C版本),然后你可以用它们构建你的灯具。
这就是我在这里所做的:http://vimeo.com/m/33500649
小心lib不接受自相交多边形,重复点或共线点。在计算三角测量之前,您必须检查这一点。
如果你已经习惯了glib库,我想你应该尝试实现C版本,但我自己没有尝试过,所以我说不清楚。我认为它甚至比C ++更快,它确实实现了精炼。对网格有用。