示例#1
0
  /** pack all the triangles into 2D rectangle */
  public void packTriangles() {

    int rc = getTriCount();

    CanonicalTri ct = new CanonicalTri();

    m_packer = new RectPacking();

    printf("RectPacking start\n");
    long t0 = time();

    for (int i = 0; i < rc; i++) {
      getCanonicalTri(i, ct);
      // add triangle with a safety gap around it
      // TODO - make proper margin around triangle

      // m_packer.addRect(ct.v1x+2*m_gap, ct.v2y + 2*m_gap);
      m_packer.addRect(ct.getWidth(), ct.getHeight());

      if (false) printf("tri: %d %s\n", i, ct);
    }
    m_packer.pack();
    if (DEBUG) printf("RectPacking done\n");

    m_texCoord = new double[6 * m_triCount];

    Vector2d origin = new Vector2d();

    for (int k = 0; k < m_triCount; k++) {

      getCanonicalTri(k, ct);
      m_packer.getRectOrigin(k, origin);

      // TODO - make proper margin around triangle
      // origin.x += m_gap;
      // origin.y += m_gap;

      int texindex = k * 6;

      ct.getTexCoord(origin.x, origin.y, texindex, m_texCoord);
    }

    // re-build the mesh
    IndexedTriangleSetBuilder itsb = new IndexedTriangleSetBuilder();
    getTriangles(itsb);
    m_triCoord = itsb.getVertices();
    m_triIndex = itsb.getFaces();

    m_texCoordIndex = new int[m_triCount * 3];

    for (int k = 0; k < m_texCoordIndex.length; k++) {
      m_texCoordIndex[k] = k;
    }

    if (DEBUG) printf("packTriangles() done %d ms\n", time() - t0);
  }
示例#2
0
  /** return size of rectangle with given index */
  private void getCanonicalTri(int index, CanonicalTri tri) {

    tri.set(m_ctri.get(index));
  }