【问题标题】:triangulation messing up triangles三角测量弄乱了三角形
【发布时间】:2015-02-04 09:45:03
【问题描述】:

我正在尝试对凸多边形进行三角剖分。

左边是三角多边形,右边是没有三角剖分的凸多边形。 (两者都是错误的)但右边的位置正确,除了它缺少凸出部分之外,还不错......

我创建三角形并将它们添加到数组列表中

    float[] vertices = polygonObject.getPolygon().getTransformedVertices();
    float[] worldVertices = new float[vertices.length];

    for (int i = 0; i < vertices.length; ++i) {
        System.out.println(vertices[i]);
        worldVertices[i] = vertices[i] / ppt;
    }

    // Make triangles
    Vector<float[]> trianglesVertices = new Vector<float[]>();

    EarClippingTriangulator triangulator = new EarClippingTriangulator();
    ArrayList<PolygonShape> triangles = new ArrayList<PolygonShape>();

    ShortArray pointsCoords = triangulator.computeTriangles(worldVertices);

    for (int i = 0; i < pointsCoords.size / 6; i++)
    {
        trianglesVertices.add(new float[] {
                pointsCoords.get(i*6),      pointsCoords.get(i*6 + 1),
                pointsCoords.get(i*6 + 2),  pointsCoords.get(i*6 + 3),
                pointsCoords.get(i*6 + 4),  pointsCoords.get(i*6 + 5),
        });

        PolygonShape triangleShape = new PolygonShape();
        triangleShape.set(trianglesVertices.get(i));
        triangles.add(triangleShape);
    }

稍后我循环该数组列表并创建主体,但不知何故 libgdx(可能是我,而不是 libgdx)完全搞砸了。

            for(PolygonShape triangle:triangles){
                BodyDef bd = new BodyDef();
                bd.type = BodyDef.BodyType.StaticBody;
                Body body = world.createBody(bd);
                body.createFixture(triangle, 1);

                bodies.add(body);

                triangle.dispose();
            }

这是我试图在 libgdx 中渲染的形状(在 Tiled 中创建)

【问题讨论】:

  • @LearnCocos2D 感谢您编辑问题,但我将 libgdx 放在标题中,因为我使用了 libgdx 框架中的 EarClippingTriangulator 类,我认为提及这一点可能很重要。

标签: libgdx box2d polygon triangulation


【解决方案1】:

我找到了另一个例子,它成功了!

https://github.com/MobiDevelop/maps-editor/blob/master/maps-basic/src/com/mobidevelop/maps/basic/BasicMapRenderer.java#L151

我从这个数组创建三角形的方式是错误的

ShortArray pointsCoords = triangulator.computeTriangles(worldVertices);

这是正确创建三角形的代码,

    for (int i = 0; i < pointsCoords.size; i += 3) {
        int v1 = pointsCoords.get(i) * 2;
        int v2 = pointsCoords.get(i + 1) * 2;
        int v3 = pointsCoords.get(i + 2) * 2;

        PolygonShape triangleShape = new PolygonShape();
        triangleShape.set(
                new float[]{
                        worldVertices[v1 + 0],
                        worldVertices[v1 + 1],
                        worldVertices[v2 + 0],
                        worldVertices[v2 + 1],
                        worldVertices[v3 + 0],
                        worldVertices[v3 + 1]
                }

        );
        triangles.add(triangleShape);
    }

【讨论】:

  • 您是否正确渲染了凸多边形?我设法用你的目标形状制作了一个 libgdx 示例,并渲染了一个落在它上面的球。
  • 嘿@Johnathan!我做到了。此答案中的代码为我修复了它。
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2018-04-03
  • 1970-01-01
  • 2011-03-29
  • 2019-09-08
相关资源
最近更新 更多