/** Draws a polyline in the x/y plane using {@link ShapeType#Line}. The vertices must contain at least 2 points (4 floats x,y). */ public void polyline (float[] vertices, int offset, int count) { if (count < 4) throw new IllegalArgumentException("Polylines must contain at least 2 points."); if (count % 2 != 0) throw new IllegalArgumentException("Polylines must have an even number of vertices."); check(ShapeType.Line, null, count); float colorBits = color.toFloatBits(); for (int i = offset, n = offset + count - 2; i < n; i += 2) { float x1 = vertices[i]; float y1 = vertices[i + 1]; float x2; float y2; x2 = vertices[i + 2]; y2 = vertices[i + 3]; renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); } }
/** Draws a polyline in the x/y plane using {@link ShapeType#Line}. The vertices must contain at least 2 points (4 floats x,y). */ public void polyline (float[] vertices, int offset, int count) { if (count < 4) throw new IllegalArgumentException("Polylines must contain at least 2 points."); if (count % 2 != 0) throw new IllegalArgumentException("Polylines must have an even number of vertices."); check(ShapeType.Line, null, count); float colorBits = color.toFloatBits(); for (int i = offset, n = offset + count - 2; i < n; i += 2) { float x1 = vertices[i]; float y1 = vertices[i + 1]; float x2; float y2; x2 = vertices[i + 2]; y2 = vertices[i + 3]; renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); } }
/** Draws a polygon in the x/y plane using {@link ShapeType#Line}. The vertices must contain at least 3 points (6 floats x,y). */ public void polygon (float[] vertices, int offset, int count) { if (count < 6) throw new IllegalArgumentException("Polygons must contain at least 3 points."); if (count % 2 != 0) throw new IllegalArgumentException("Polygons must have an even number of vertices."); check(ShapeType.Line, null, count); float colorBits = color.toFloatBits(); float firstX = vertices[0]; float firstY = vertices[1]; for (int i = offset, n = offset + count; i < n; i += 2) { float x1 = vertices[i]; float y1 = vertices[i + 1]; float x2; float y2; if (i + 2 >= count) { x2 = firstX; y2 = firstY; } else { x2 = vertices[i + 2]; y2 = vertices[i + 3]; } renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); } }
/** Draws a point using {@link ShapeType#Point}, {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void point (float x, float y, float z) { if (shapeType == ShapeType.Line) { float size = defaultRectLineWidth * 0.5f; line(x - size, y - size, z, x + size, y + size, z); return; } else if (shapeType == ShapeType.Filled) { float size = defaultRectLineWidth * 0.5f; box(x - size, y - size, z - size, defaultRectLineWidth, defaultRectLineWidth, defaultRectLineWidth); return; } check(ShapeType.Point, null, 1); renderer.color(color); renderer.vertex(x, y, z); }
/** Draws a polygon in the x/y plane using {@link ShapeType#Line}. The vertices must contain at least 3 points (6 floats x,y). */ public void polygon (float[] vertices, int offset, int count) { if (count < 6) throw new IllegalArgumentException("Polygons must contain at least 3 points."); if (count % 2 != 0) throw new IllegalArgumentException("Polygons must have an even number of vertices."); check(ShapeType.Line, null, count); float colorBits = color.toFloatBits(); float firstX = vertices[0]; float firstY = vertices[1]; for (int i = offset, n = offset + count; i < n; i += 2) { float x1 = vertices[i]; float y1 = vertices[i + 1]; float x2; float y2; if (i + 2 >= count) { x2 = firstX; y2 = firstY; } else { x2 = vertices[i + 2]; y2 = vertices[i + 3]; } renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); } }
/** Draws a point using {@link ShapeType#Point}, {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void point (float x, float y, float z) { if (shapeType == ShapeType.Line) { float size = defaultRectLineWidth * 0.5f; line(x - size, y - size, z, x + size, y + size, z); return; } else if (shapeType == ShapeType.Filled) { float size = defaultRectLineWidth * 0.5f; box(x - size, y - size, z - size, defaultRectLineWidth, defaultRectLineWidth, defaultRectLineWidth); return; } check(ShapeType.Point, null, 1); renderer.color(color); renderer.vertex(x, y, z); }
/** Draws a line using {@link ShapeType#Line} or {@link ShapeType#Filled}. The line is drawn with two colors interpolated * between the start and end points. */ public void line (float x, float y, float z, float x2, float y2, float z2, Color c1, Color c2) { if (shapeType == ShapeType.Filled) { rectLine(x, y, x2, y2, defaultRectLineWidth, c1, c2); return; } check(ShapeType.Line, null, 2); renderer.color(c1.r, c1.g, c1.b, c1.a); renderer.vertex(x, y, z); renderer.color(c2.r, c2.g, c2.b, c2.a); renderer.vertex(x2, y2, z2); }
/** Draws a line using {@link ShapeType#Line} or {@link ShapeType#Filled}. The line is drawn with two colors interpolated * between the start and end points. */ public void line (float x, float y, float z, float x2, float y2, float z2, Color c1, Color c2) { if (shapeType == ShapeType.Filled) { rectLine(x, y, x2, y2, defaultRectLineWidth, c1, c2); return; } check(ShapeType.Line, null, 2); renderer.color(c1.r, c1.g, c1.b, c1.a); renderer.vertex(x, y, z); renderer.color(c2.r, c2.g, c2.b, c2.a); renderer.vertex(x2, y2, z2); }
check(ShapeType.Line, null, segments * 2 + 2); float colorBits = color.toFloatBits();
check(ShapeType.Line, ShapeType.Filled, segments * 3); float colorBits = color.toFloatBits(); float angle = 2 * MathUtils.PI / segments;
check(ShapeType.Line, ShapeType.Filled, segments * 3); float colorBits = color.toFloatBits(); float angle = 2 * MathUtils.PI / segments;
/** Draws an ellipse using {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void ellipse (float x, float y, float width, float height, int segments) { if (segments <= 0) throw new IllegalArgumentException("segments must be > 0."); check(ShapeType.Line, ShapeType.Filled, segments * 3); float colorBits = color.toFloatBits(); float angle = 2 * MathUtils.PI / segments; float cx = x + width / 2, cy = y + height / 2; if (shapeType == ShapeType.Line) { for (int i = 0; i < segments; i++) { renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos(i * angle)), cy + (height * 0.5f * MathUtils.sin(i * angle)), 0); renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos((i + 1) * angle)), cy + (height * 0.5f * MathUtils.sin((i + 1) * angle)), 0); } } else { for (int i = 0; i < segments; i++) { renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos(i * angle)), cy + (height * 0.5f * MathUtils.sin(i * angle)), 0); renderer.color(colorBits); renderer.vertex(cx, cy, 0); renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos((i + 1) * angle)), cy + (height * 0.5f * MathUtils.sin((i + 1) * angle)), 0); } } }
/** Draws an ellipse using {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void ellipse (float x, float y, float width, float height, int segments) { if (segments <= 0) throw new IllegalArgumentException("segments must be > 0."); check(ShapeType.Line, ShapeType.Filled, segments * 3); float colorBits = color.toFloatBits(); float angle = 2 * MathUtils.PI / segments; float cx = x + width / 2, cy = y + height / 2; if (shapeType == ShapeType.Line) { for (int i = 0; i < segments; i++) { renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos(i * angle)), cy + (height * 0.5f * MathUtils.sin(i * angle)), 0); renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos((i + 1) * angle)), cy + (height * 0.5f * MathUtils.sin((i + 1) * angle)), 0); } } else { for (int i = 0; i < segments; i++) { renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos(i * angle)), cy + (height * 0.5f * MathUtils.sin(i * angle)), 0); renderer.color(colorBits); renderer.vertex(cx, cy, 0); renderer.color(colorBits); renderer.vertex(cx + (width * 0.5f * MathUtils.cos((i + 1) * angle)), cy + (height * 0.5f * MathUtils.sin((i + 1) * angle)), 0); } } }
/** Draws a triangle in x/y plane with colored corners using {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void triangle (float x1, float y1, float x2, float y2, float x3, float y3, Color col1, Color col2, Color col3) { check(ShapeType.Line, ShapeType.Filled, 6); if (shapeType == ShapeType.Line) { renderer.color(col1.r, col1.g, col1.b, col1.a); renderer.vertex(x1, y1, 0); renderer.color(col2.r, col2.g, col2.b, col2.a); renderer.vertex(x2, y2, 0); renderer.color(col2.r, col2.g, col2.b, col2.a); renderer.vertex(x2, y2, 0); renderer.color(col3.r, col3.g, col3.b, col3.a); renderer.vertex(x3, y3, 0); renderer.color(col3.r, col3.g, col3.b, col3.a); renderer.vertex(x3, y3, 0); renderer.color(col1.r, col1.g, col1.b, col1.a); renderer.vertex(x1, y1, 0); } else { renderer.color(col1.r, col1.g, col1.b, col1.a); renderer.vertex(x1, y1, 0); renderer.color(col2.r, col2.g, col2.b, col2.a); renderer.vertex(x2, y2, 0); renderer.color(col3.r, col3.g, col3.b, col3.a); renderer.vertex(x3, y3, 0); } }
/** Draws a triangle in x/y plane with colored corners using {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void triangle (float x1, float y1, float x2, float y2, float x3, float y3, Color col1, Color col2, Color col3) { check(ShapeType.Line, ShapeType.Filled, 6); if (shapeType == ShapeType.Line) { renderer.color(col1.r, col1.g, col1.b, col1.a); renderer.vertex(x1, y1, 0); renderer.color(col2.r, col2.g, col2.b, col2.a); renderer.vertex(x2, y2, 0); renderer.color(col2.r, col2.g, col2.b, col2.a); renderer.vertex(x2, y2, 0); renderer.color(col3.r, col3.g, col3.b, col3.a); renderer.vertex(x3, y3, 0); renderer.color(col3.r, col3.g, col3.b, col3.a); renderer.vertex(x3, y3, 0); renderer.color(col1.r, col1.g, col1.b, col1.a); renderer.vertex(x1, y1, 0); } else { renderer.color(col1.r, col1.g, col1.b, col1.a); renderer.vertex(x1, y1, 0); renderer.color(col2.r, col2.g, col2.b, col2.a); renderer.vertex(x2, y2, 0); renderer.color(col3.r, col3.g, col3.b, col3.a); renderer.vertex(x3, y3, 0); } }
/** Draws a triangle in x/y plane using {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void triangle (float x1, float y1, float x2, float y2, float x3, float y3) { check(ShapeType.Line, ShapeType.Filled, 6); float colorBits = color.toFloatBits(); if (shapeType == ShapeType.Line) { renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); renderer.color(colorBits); renderer.vertex(x3, y3, 0); renderer.color(colorBits); renderer.vertex(x3, y3, 0); renderer.color(colorBits); renderer.vertex(x1, y1, 0); } else { renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); renderer.color(colorBits); renderer.vertex(x3, y3, 0); } }
/** Draws a triangle in x/y plane using {@link ShapeType#Line} or {@link ShapeType#Filled}. */ public void triangle (float x1, float y1, float x2, float y2, float x3, float y3) { check(ShapeType.Line, ShapeType.Filled, 6); float colorBits = color.toFloatBits(); if (shapeType == ShapeType.Line) { renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); renderer.color(colorBits); renderer.vertex(x3, y3, 0); renderer.color(colorBits); renderer.vertex(x3, y3, 0); renderer.color(colorBits); renderer.vertex(x1, y1, 0); } else { renderer.color(colorBits); renderer.vertex(x1, y1, 0); renderer.color(colorBits); renderer.vertex(x2, y2, 0); renderer.color(colorBits); renderer.vertex(x3, y3, 0); } }
check(ShapeType.Line, ShapeType.Filled, 8); float colorBits = color.toFloatBits(); if (shapeType == ShapeType.Line) {
check(ShapeType.Line, ShapeType.Filled, 8); float colorBits = color.toFloatBits(); if (shapeType == ShapeType.Line) {
check(ShapeType.Line, ShapeType.Filled, 8); float colorBits = color.toFloatBits(); Vector2 t = tmp.set(y2 - y1, x1 - x2).nor();