VertexInfo corner110, VertexInfo corner001, VertexInfo corner011, VertexInfo corner101, VertexInfo corner111) { builder.ensureVertices(8); final short i000 = builder.vertex(corner000); final short i100 = builder.vertex(corner100); final short i110 = builder.vertex(corner110); final short i010 = builder.vertex(corner010); final short i001 = builder.vertex(corner001); final short i101 = builder.vertex(corner101); final short i111 = builder.vertex(corner111); final short i011 = builder.vertex(corner011);
VertexInfo corner110, VertexInfo corner001, VertexInfo corner011, VertexInfo corner101, VertexInfo corner111) { builder.ensureVertices(8); final short i000 = builder.vertex(corner000); final short i100 = builder.vertex(corner100); final short i110 = builder.vertex(corner110); final short i010 = builder.vertex(corner010); final short i001 = builder.vertex(corner001); final short i101 = builder.vertex(corner101); final short i111 = builder.vertex(corner111); final short i011 = builder.vertex(corner011);
public static Model createFrustumModel (final Vector3... p) { ModelBuilder builder = new ModelBuilder(); builder.begin(); MeshPartBuilder mpb = builder.part("", GL20.GL_LINES, Usage.Position | Usage.Normal, new Material(new ColorAttribute(ColorAttribute.Diffuse, Color.WHITE))); mpb.vertex(p[0].x, p[0].y, p[0].z, 0, 0, 1, p[1].x, p[1].y, p[1].z, 0, 0, 1, p[2].x, p[2].y, p[2].z, 0, 0, 1, p[3].x, p[3].y, p[3].z, 0, 0, 1, // near p[4].x, p[4].y, p[4].z, 0, 0, -1, p[5].x, p[5].y, p[5].z, 0, 0, -1, p[6].x, p[6].y, p[6].z, 0, 0, -1, p[7].x, p[7].y, p[7].z, 0, 0, -1); mpb.index((short)0, (short)1, (short)1, (short)2, (short)2, (short)3, (short)3, (short)0); mpb.index((short)4, (short)5, (short)5, (short)6, (short)6, (short)7, (short)7, (short)4); mpb.index((short)0, (short)4, (short)1, (short)5, (short)2, (short)6, (short)3, (short)7); return builder.end(); }
curr1.hasUV = curr1.hasPosition = curr1.hasNormal = true; VertexInfo curr2 = vertTmp4.set(null, null, null, null).setPos(0, hh, 0).setNor(0, 1, 0).setUV(0.5f, 0); final short base = builder.vertex(curr2); short i1, i2 = 0; for (int i = 0; i <= divisions; i++) { curr1.position.y = -hh; curr1.uv.set(u, 1); i1 = builder.vertex(curr1); if (i != 0) builder.triangle(base, i1, i2); // FIXME don't duplicate lines and points i2 = i1;
curr1.hasUV = curr1.hasPosition = curr1.hasNormal = true; VertexInfo curr2 = vertTmp4.set(null, null, null, null).setPos(0, hh, 0).setNor(0, 1, 0).setUV(0.5f, 0); final short base = builder.vertex(curr2); short i1, i2 = 0; for (int i = 0; i <= divisions; i++) { curr1.position.y = -hh; curr1.uv.set(u, 1); i1 = builder.vertex(curr1); if (i != 0) builder.triangle(base, i1, i2); // FIXME don't duplicate lines and points i2 = i1;
/** 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)); } } }
currEx.position.set(centerX, centerY, centerZ); currEx.normal.set(normalX, normalY, normalZ); final short center = builder.vertex(currEx); float angle = 0f; final float us = 0.5f * (innerWidth / width); sxEx.z * x + syEx.z * y); currEx.uv.set(.5f + .5f * x, .5f + .5f * y); i1 = builder.vertex(currEx); currIn.uv.set(.5f + us * x, .5f + vs * y); i2 = i1; i1 = builder.vertex(currIn);
currEx.position.set(centerX, centerY, centerZ); currEx.normal.set(normalX, normalY, normalZ); final short center = builder.vertex(currEx); float angle = 0f; final float us = 0.5f * (innerWidth / width); sxEx.z * x + syEx.z * y); currEx.uv.set(.5f + .5f * x, .5f + .5f * y); i1 = builder.vertex(currEx); currIn.uv.set(.5f + us * x, .5f + vs * y); i2 = i1; i1 = builder.vertex(currIn);
curr1.position.mul(transform); curr1.uv.set(u, v); tmpIndices.set(tempOffset, builder.vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points
curr1.position.mul(transform); curr1.uv.set(u, v); tmpIndices.set(tempOffset, builder.vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points
VertexInfo corner110, VertexInfo corner001, VertexInfo corner011, VertexInfo corner101, VertexInfo corner111) { builder.ensureVertices(8); final short i000 = builder.vertex(corner000); final short i100 = builder.vertex(corner100); final short i110 = builder.vertex(corner110); final short i010 = builder.vertex(corner010); final short i001 = builder.vertex(corner001); final short i101 = builder.vertex(corner101); final short i111 = builder.vertex(corner111); final short i011 = builder.vertex(corner011);
curr1.hasUV = curr1.hasPosition = curr1.hasNormal = true; VertexInfo curr2 = vertTmp4.set(null, null, null, null).setPos(0, hh, 0).setNor(0, 1, 0).setUV(0.5f, 0); final short base = builder.vertex(curr2); short i1, i2 = 0; for (int i = 0; i <= divisions; i++) { curr1.position.y = -hh; curr1.uv.set(u, 1); i1 = builder.vertex(curr1); if (i != 0) builder.triangle(base, i1, i2); // FIXME don't duplicate lines and points i2 = i1;
/** 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)); } } }
currEx.position.set(centerX, centerY, centerZ); currEx.normal.set(normalX, normalY, normalZ); final short center = builder.vertex(currEx); float angle = 0f; final float us = 0.5f * (innerWidth / width); sxEx.z * x + syEx.z * y); currEx.uv.set(.5f + .5f * x, .5f + .5f * y); i1 = builder.vertex(currEx); currIn.uv.set(.5f + us * x, .5f + vs * y); i2 = i1; i1 = builder.vertex(currIn);
curr1.position.mul(transform); curr1.uv.set(u, v); tmpIndices.set(tempOffset, builder.vertex(curr1)); final int o = tempOffset + s; if ((iv > 0) && (iu > 0)) // FIXME don't duplicate lines and points