package com.igorcrevar.rolloverchuck.mesh; import com.badlogic.gdx.graphics.Color; 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 CubeMeshWithNormals implements IMesh { private Mesh mesh; public CubeMeshWithNormals(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[36]; int index = 0; for (int i = 0; i < 6; ++i) { indices[index++] = (short)(i * 4); indices[index++] = (short)(i * 4 + 1); indices[index++] = (short)(i * 4 + 3); indices[index++] = (short)(i * 4 + 0); indices[index++] = (short)(i * 4 + 3); indices[index++] = (short)(i * 4 + 2); } float color = Color.toFloatBits(255, 255, 255, 255); float[] vertices = new float[] { -size, -size, size, color, 0.0f, 0.0f, 1.0f, size, -size, size, color, 0.0f, 0.0f, 1.0f, -size, size, size, color, 0.0f, 0.0f, 1.0f, size, size, size, color, 0.0f, 0.0f, 1.0f, size, -size, size, color, 1.0f, 0.0f, 0.0f, size, -size, -size, color, 1.0f, 0.0f, 0.0f, size, size, size, color, 1.0f, 0.0f, 0.0f, size, size, -size, color, 1.0f, 0.0f, 0.0f, size, -size, -size, color, 0.0f, 0.0f, -1.0f, -size, -size, -size, color, 0.0f, 0.0f, -1.0f, size, size, -size, color, 0.0f, 0.0f, -1.0f, -size, size, -size, color, 0.0f, 0.0f, -1.0f, -size, -size, -size, color, -1.0f, 0.0f, 0.0f, -size, -size, size, color, -1.0f, 0.0f, 0.0f, -size, size, -size, color, -1.0f, 0.0f, 0.0f, -size, size, size, color, -1.0f, 0.0f, 0.0f, -size, -size, -size, color, 0.0f, -1.0f, 0.0f, size, -size, -size, color, 0.0f, -1.0f, 0.0f, -size, -size, size, color, 0.0f, -1.0f, 0.0f, size, -size, size, color, 0.0f, -1.0f, 0.0f, -size, size, size, color, 0.0f, 1.0f, 0.0f, size, size, size, color, 0.0f, 1.0f, 0.0f, -size, size, -size, color, 0.0f, 1.0f, 0.0f, size, size, -size, color, 0.0f, 1.0f, 0.0f,}; // populate normal also Mesh newMesh = new Mesh(true, vertices.length / 7, indices.length, VertexAttribute.Position(), VertexAttribute.Color(), VertexAttribute.Normal()); newMesh.setVertices(vertices); newMesh.setIndices(indices); return newMesh; } }