package com.igorcrevar.rolloverchuck.mesh;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.VertexAttribute;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.igorcrevar.rolloverchuck.GameData;
public class CubeMesh implements IMesh {
private Mesh mesh;
public CubeMesh(GameData gameData) {
mesh = getMesh(0.5f);
}
@Override
public void draw(ShaderProgram shaderProgram) {
mesh.render(shaderProgram, GL20.GL_TRIANGLES);
}
@Override
public void dispose() {
mesh.dispose();
}
private Mesh getMesh(float size) {
short[] indices = new short[] {
// Faces definition
0, 1, 3, 0, 3, 2, // Face front
4, 5, 7, 4, 7, 6, // Face right
8, 9, 11, 8, 11, 10, // ...
12, 13, 15, 12, 15, 14,
16, 17, 19, 16, 19, 18,
20, 21, 23, 20, 23, 22,
};
float[] vertices = new float[] {
-size, -size, size, 0.0f, 0.0f,
size, -size, size, 0.0f, 1.0f,
-size, size, size, 1.0f, 0.0f,
size, size, size, 1.0f, 1.0f,
size, -size, size, 0.0f, 0.0f,
size, -size, -size, 0.0f, 1.0f,
size, size, size, 1.0f, 0.0f,
size, size, -size, 1.0f, 1.0f,
size, -size, -size, 0.0f, 0.0f,
-size, -size, -size, 0.0f, 1.0f,
size, size, -size, 1.0f, 0.0f,
-size, size, -size, 1.0f, 1.0f,
-size, -size, -size, 0.0f, 0.0f,
-size, -size, size, 0.0f, 1.0f,
-size, size, -size, 1.0f, 0.0f,
-size, size, size, 1.0f, 1.0f,
-size, -size, -size, 0.0f, 0.0f,
size, -size, -size, 0.0f, 1.0f,
-size, -size, size, 1.0f, 0.0f,
size, -size, size, 1.0f, 1.0f,
-size, size, size, 0.0f, 0.0f,
size, size, size, 0.0f, 1.0f,
-size, size, -size, 1.0f, 0.0f,
size, size, -size, 1.0f, 1.0f,
};
// populate normal also
Mesh newMesh = new Mesh(true, vertices.length / 5, indices.length, VertexAttribute.Position(), VertexAttribute.TexCoords(0));
newMesh.setIndices(indices);
newMesh.setVertices(vertices);
return newMesh;
}
}