public static Color[] ToColorsA(RayTraceChunkManager rtc, int bits) { int dcx = rtc.getChunkSize().x; int dcy = rtc.getChunkSize().y; int dcz = rtc.getChunkSize().z; int dgx = rtc.getSizeX(); int dgy = rtc.getSizeY(); int dgz = rtc.getSizeZ(); Color[,,] colors = new Color[dgx, (dgy / bits), dgz]; for (int cx = 0; cx < dcx; cx++) { for (int cy = 0; cy < dcy; cy++) { for (int cz = 0; cz < dcz; cz++) { RayTraceChunk chunk = rtc.getChunk(cx, cy, cz); for (int bx = 0; bx < Const.ChunkSize; bx++) { for (int by = 0; by < Const.ChunkSize / bits; by++) { for (int bz = 0; bz < Const.ChunkSize; bz++) { int iv = 0; for (int n = 0; n < bits; n++) { iv |= chunk.testBlock(bx, by * bits + n, bz) ? (1 << n) : 0; } float a = iv / (float)((1 << bits) - 1); int gx = cx * Const.ChunkSize + bx; int gy = cy * Const.ChunkSize / bits + by; int gz = cz * Const.ChunkSize + bz; colors[gx, gy, gz] = new Color(0, 0, 0, a); } } } } } } int sizeX = colors.GetLength(0); int sizeY = colors.GetLength(1); int sizeZ = colors.GetLength(2); Color[] rlt = new Color[sizeX * sizeY * sizeZ]; for (int x = 0; x < sizeX; x++) { for (int y = 0; y < sizeY; y++) { for (int z = 0; z < sizeZ; z++) { rlt[z * sizeY * sizeX + y * sizeX + x] = colors[x, y, z]; } } } return(rlt); }