void AddCube(MeshDesc meshDesc, CubeDesc desc, Vector3 position) { int positionsStartIndex = meshDesc.positions.Count; int normalsStartIndex = meshDesc.normals.Count; int indicesStartIndex = meshDesc.indices.Count; meshDesc.positions.AddRange(desc.positions); meshDesc.normals.AddRange(desc.normals); meshDesc.indices.AddRange(desc.indices); for (int i = positionsStartIndex; i < meshDesc.positions.Count; ++i) { meshDesc.positions[i] += position; } for (int i = indicesStartIndex; i < meshDesc.indices.Count; ++i) { meshDesc.indices[i] += positionsStartIndex; } }
void FillMeshDesc(MeshDesc desc) { CubeDesc cubeDesc = new CubeDesc(); InitCubeDesc(cubeDesc); Vector3 position = new Vector3(); for (int z = 0; z < size; ++z) { for (int y = 0; y < size; ++y) { for (int x = 0; x < size; ++x) { position.x = x * cubeSize; position.y = y * cubeSize; position.z = z * cubeSize; AddCube(desc, cubeDesc, position); } } } }
void InitCubeDesc(CubeDesc desc) { Vector3 vertice_0 = new Vector3(-cubeSize * .5f, -cubeSize * .5f, cubeSize * .5f); Vector3 vertice_1 = new Vector3(cubeSize * .5f, -cubeSize * .5f, cubeSize * .5f); Vector3 vertice_2 = new Vector3(cubeSize * .5f, -cubeSize * .5f, -cubeSize * .5f); Vector3 vertice_3 = new Vector3(-cubeSize * .5f, -cubeSize * .5f, -cubeSize * .5f); Vector3 vertice_4 = new Vector3(-cubeSize * .5f, cubeSize * .5f, cubeSize * .5f); Vector3 vertice_5 = new Vector3(cubeSize * .5f, cubeSize * .5f, cubeSize * .5f); Vector3 vertice_6 = new Vector3(cubeSize * .5f, cubeSize * .5f, -cubeSize * .5f); Vector3 vertice_7 = new Vector3(-cubeSize * .5f, cubeSize * .5f, -cubeSize * .5f); Vector3 up = Vector3.up; Vector3 down = Vector3.down; Vector3 front = Vector3.forward; Vector3 back = Vector3.back; Vector3 left = Vector3.left; Vector3 right = Vector3.right; desc.positions = new Vector3[] { // Bottom Polygon vertice_0, vertice_1, vertice_2, vertice_0, // Left Polygon vertice_7, vertice_4, vertice_0, vertice_3, // Front Polygon vertice_4, vertice_5, vertice_1, vertice_0, // Back Polygon vertice_6, vertice_7, vertice_3, vertice_2, // Right Polygon vertice_5, vertice_6, vertice_2, vertice_1, // Top Polygon vertice_7, vertice_6, vertice_5, vertice_4 }; desc.normals = new Vector3[] { // Bottom Side Render down, down, down, down, // LEFT Side Render left, left, left, left, // FRONT Side Render front, front, front, front, // BACK Side Render back, back, back, back, // RIGTH Side Render right, right, right, right, // UP Side Render up, up, up, up }; desc.indices = new int[] { // Cube Bottom Side Triangles 3, 1, 0, 3, 2, 1, // Cube Left Side Triangles 3 + 4 * 1, 1 + 4 * 1, 0 + 4 * 1, 3 + 4 * 1, 2 + 4 * 1, 1 + 4 * 1, // Cube Front Side Triangles 3 + 4 * 2, 1 + 4 * 2, 0 + 4 * 2, 3 + 4 * 2, 2 + 4 * 2, 1 + 4 * 2, // Cube Back Side Triangles 3 + 4 * 3, 1 + 4 * 3, 0 + 4 * 3, 3 + 4 * 3, 2 + 4 * 3, 1 + 4 * 3, // Cube Rigth Side Triangles 3 + 4 * 4, 1 + 4 * 4, 0 + 4 * 4, 3 + 4 * 4, 2 + 4 * 4, 1 + 4 * 4, // Cube Top Side Triangles 3 + 4 * 5, 1 + 4 * 5, 0 + 4 * 5, 3 + 4 * 5, 2 + 4 * 5, 1 + 4 * 5, }; }