/** Build a patch shape. Requires GL_POINTS, GL_LINES or GL_TRIANGLES primitive type. */ public static void build (MeshPartBuilder builder, VertexInfo corner00, VertexInfo corner10, VertexInfo corner11, VertexInfo corner01, int divisionsU, int divisionsV) { if (divisionsU < 1 || divisionsV < 1) { throw new GdxRuntimeException("divisionsU and divisionV must be > 0, u,v: " + divisionsU + ", " + divisionsV); } builder.ensureVertices((divisionsV + 1) * (divisionsU + 1)); builder.ensureRectangleIndices(divisionsV * divisionsU); for (int u = 0; u <= divisionsU; u++) { final float alphaU = (float)u / (float)divisionsU; vertTmp5.set(corner00).lerp(corner10, alphaU); vertTmp6.set(corner01).lerp(corner11, alphaU); for (int v = 0; v <= divisionsV; v++) { final short idx = builder.vertex(vertTmp7.set(vertTmp5).lerp(vertTmp6, (float)v / (float)divisionsV)); if (u > 0 && v > 0) builder.rect((short)(idx - divisionsV - 2), (short)(idx - 1), idx, (short)(idx - divisionsV - 1)); } } }
/** Build a patch shape. Requires GL_POINTS, GL_LINES or GL_TRIANGLES primitive type. */ public static void build (MeshPartBuilder builder, VertexInfo corner00, VertexInfo corner10, VertexInfo corner11, VertexInfo corner01, int divisionsU, int divisionsV) { if (divisionsU < 1 || divisionsV < 1) { throw new GdxRuntimeException("divisionsU and divisionV must be > 0, u,v: " + divisionsU + ", " + divisionsV); } builder.ensureVertices((divisionsV + 1) * (divisionsU + 1)); builder.ensureRectangleIndices(divisionsV * divisionsU); for (int u = 0; u <= divisionsU; u++) { final float alphaU = (float)u / (float)divisionsU; vertTmp5.set(corner00).lerp(corner10, alphaU); vertTmp6.set(corner01).lerp(corner11, alphaU); for (int v = 0; v <= divisionsV; v++) { final short idx = builder.vertex(vertTmp7.set(vertTmp5).lerp(vertTmp6, (float)v / (float)divisionsV)); if (u > 0 && v > 0) builder.rect((short)(idx - divisionsV - 2), (short)(idx - 1), idx, (short)(idx - divisionsV - 1)); } } }
/** Build a patch shape. Requires GL_POINTS, GL_LINES or GL_TRIANGLES primitive type. */ public static void build (MeshPartBuilder builder, VertexInfo corner00, VertexInfo corner10, VertexInfo corner11, VertexInfo corner01, int divisionsU, int divisionsV) { if (divisionsU < 1 || divisionsV < 1) { throw new GdxRuntimeException("divisionsU and divisionV must be > 0, u,v: " + divisionsU + ", " + divisionsV); } builder.ensureVertices((divisionsV + 1) * (divisionsU + 1)); builder.ensureRectangleIndices(divisionsV * divisionsU); for (int u = 0; u <= divisionsU; u++) { final float alphaU = (float)u / (float)divisionsU; vertTmp5.set(corner00).lerp(corner10, alphaU); vertTmp6.set(corner01).lerp(corner11, alphaU); for (int v = 0; v <= divisionsV; v++) { final short idx = builder.vertex(vertTmp7.set(vertTmp5).lerp(vertTmp6, (float)v / (float)divisionsV)); if (u > 0 && v > 0) builder.rect((short)(idx - divisionsV - 2), (short)(idx - 1), idx, (short)(idx - divisionsV - 1)); } } }