Я использую libGdx для создания 2D-игры и пытаюсь использовать этот конкретный метод для рисования простой 2D-текстуры, указав 4 вершины индивидуально;
draw(Texture texture, float[] spriteVertices, int offset, int length)
описание говорит: Рисует прямоугольник, используя заданные вершины. Должно быть 4 вершины, каждая из которых состоит из 5 элементов в следующем порядке: x, y, цвет, u, v.
Другие методы рисования работают нормально, но я не могу заставить работать этот. Что я пытаюсь сделать это;
batch.draw(boxTexture, new float[] {-5, -5, 0, Color.toFloatBits(255, 0, 0, 255), 0, 0,
5, -5, 0, Color.toFloatBits(255, 255, 255, 255), 1, 0,
5, 5, 0, Color.toFloatBits(255, 255, 255, 255), 1, 1,
-5, 5, 0, Color.toFloatBits(255, 255, 255, 255), 0, 1}, 3, 3);
Я не очень хорошо знаком с тем, как работает OpenGL, в частности, какими должны быть смещение и длина. Кто-нибудь более знающий знает, как заставить это работать?
ОБНОВИТЬ:
Работает с мешами, но потом оказывается не было прозрачности, что раздражает. В конце концов, я просто добавил пользовательский метод в SpriteBatch, просто потому, что так проще разобраться. Вершины рисуются по часовой стрелке;
public void drawQuad (Texture texture, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float col) {
if (!drawing) throw new IllegalStateException("SpriteBatch.begin must be called before draw.");
if (texture != lastTexture) {
switchTexture(texture);
} else if (idx == vertices.length) //
renderMesh();
final float u = 0;
final float v = 1;
final float u2 = 1;
final float v2 = 0;
vertices[idx++] = x1;
vertices[idx++] = y1;
vertices[idx++] = col;
vertices[idx++] = u;
vertices[idx++] = v;
vertices[idx++] = x2;
vertices[idx++] = y2;
vertices[idx++] = col;
vertices[idx++] = u;
vertices[idx++] = v2;
vertices[idx++] = x3;
vertices[idx++] = y3;
vertices[idx++] = col;
vertices[idx++] = u2;
vertices[idx++] = v2;
vertices[idx++] = x4;
vertices[idx++] = y4;
vertices[idx++] = col;
vertices[idx++] = u2;
vertices[idx++] = v;
}