Как массив вокселей 16^3 разделить на массивы по 4*8*8 и получить один из них по id?

Для начала, вам потребуется создать массив, который будет иметь размерность 4*8*8, чтобы разделить ваш исходный массив вокселей размером 16^3 на более мелкие части.

Один из возможных способов сделать это - это использовать трехмерные циклы для прохода по всем элементам исходного массива и копирования их в соответствующий подмассив размерности 4*8*8.

// Создаем исходный массив вокселей размером 16^3
const int size = 16;
unsigned char voxels[size][size][size];

// Создаем массив подмассивов размером 4*8*8
const int subSizeX = 4;
const int subSizeY = 8;
const int subSizeZ = 8;
unsigned char subArrays[size/subSizeX][size/subSizeY][size/subSizeZ][subSizeX][subSizeY][subSizeZ];

// Заполняем исходный массив вокселей случайными значениями
for (int x = 0; x < size; ++x) {
    for (int y = 0; y < size; ++y) {
        for (int z = 0; z < size; ++z) {
            voxels[x][y][z] = rand() % 256; // Просто для примера
        }
    }
}

// Разделяем исходный массив на подмассивы
for (int subX = 0; subX < size/subSizeX; ++subX) {
    for (int subY = 0; subY < size/subSizeY; ++subY) {
        for (int subZ = 0; subZ < size/subSizeZ; ++subZ) {
            for (int x = 0; x < subSizeX; ++x) {
                for (int y = 0; y < subSizeY; ++y) {
                    for (int z = 0; z < subSizeZ; ++z) {
                        subArrays[subX][subY][subZ][x][y][z] = voxels[subX*subSizeX+x][subY*subSizeY+y][subZ*subSizeZ+z];
                    }
                }
            }
        }
    }
}

// Получаем подмассив по id
int subXId = 1; // Пример значения id по оси X
int subYId = 2; // Пример значения id по оси Y
int subZId = 3; // Пример значения id по оси Z

unsigned char subArray[subSizeX][subSizeY][subSizeZ];
for (int x = 0; x < subSizeX; ++x) {
    for (int y = 0; y < subSizeY; ++y) {
        for (int z = 0; z < subSizeZ; ++z) {
            subArray[x][y][z] = subArrays[subXId][subYId][subZId][x][y][z];
        }
    }
}

// Делаем что-то с полученным подмассивом

В этом примере мы используем двумерный массив subArrays для хранения подмассивов размером 4*8*8. Затем мы используем трехмерные циклы для разделения исходного массива voxels на подмассивы и копирования их в subArrays.

Чтобы получить определенный подмассив по id, мы используем значения subXId, subYId и subZId для указания нужных индексов в subArrays. Затем мы копируем значения из выбранного подмассива в subArray для дальнейшей работы с ним.

Обратите внимание, что в этом примере предполагается, что размерности 16^3, 4*8*8 и id по каждой из осей X, Y и Z являются целыми числами. Если у вас есть конкретные требования или ограничения, учтите их при адаптации этого примера к вашей конкретной ситуации.