Для начала, вам потребуется создать массив, который будет иметь размерность 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 являются целыми числами. Если у вас есть конкретные требования или ограничения, учтите их при адаптации этого примера к вашей конкретной ситуации.