1

有没有办法通过用它们的索引定义顶点来用 Box2D 创建一个多边形?
由于我使用的是openGL,无论如何我都必须定义顶点和索引,我很惊讶Box2D中没有一种方法可以像我通常创建一个网格一样创建一个身体(形状)。我是否遗漏了什么,或者这通常以不同的方式完成?

4

2 回答 2

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 仅支持凸形。如果你想要凹形,我认为这篇文章会对你有所帮助,仅限 AS3 =)。希望您能了解如何在 C++ 上执行此操作。玩得开心!

于 2013-06-16T22:42:43.933 回答
0

你应该看看 poly2tri 库:http ://code.google.com/p/poly2tri/

这是一个非常快速有效的库来执行约束 Delaunay 三角剖分(http://en.m.wikipedia.org/wiki/Constrained_Delaunay_triangulation)。它从您的输入顶点(最终是 Steiner 点,但您必须自己计算它们才能获得精炼的 Delaunay,或使用 C 版本的库)输出三角形映射,然后您可以使用它们构建您的固定装置.

这就是我在这里所做的:http: //vimeo.com/m/33500649

请注意,该库不会接受自相交多边形、重复点或共线点。在计算三角测量之前,您必须检查这一点。

如果你习惯了 glib 库,我猜你应该尝试实现 C 版本,但我自己没有尝试过,所以我说不出来。我认为它甚至比 C++ 更快,并且它确实实现了精炼。可用于网格。

于 2013-06-17T06:53:57.643 回答