Я пишу текстурный компрессор BC1, который сжимает независимые блоки текселей 4x4.Я беру 2D-изображение и преобразую его в 2D-сетку из 4x4 текстовых блоков, так что 2D в 4D.Это на самом деле 5D в 3D, так как каждый тексель имеет 4 компонента, но это простой цикл, повторяющийся по каналам, но они постоянны и могут быть учтены.Я знаю, что мне нужно 4 вложенных цикла, но индексация массива в 4D сломала мне мозг.Это то, что я придумал, но он пропускает диапазоны показателей.Я явно сделал что-то не так.
#define LIM_X 2
#define LIM_Y 2
#define LIM_I 4
#define LIM_J 4
unsigned int x, y, i, j;
unsigned char src[LIM_Y * LIM_J][LIM_X * LIM_I]; // 8 by 8
unsigned char tmp[LIM_Y][LIM_X][LIM_J][LIM_I]; // 2 by 2 by 4 by 4
for(y = 0; y < LIM_Y; y++) {
for(x = 0; x < LIM_X; x++) {
for(j = 0; j < LIM_J; j++) {
for(i = 0; i < LIM_I; i++) {
tmp[y][x][j][i] = src[y * LIM_J + j][x * LIM_I + i];
}
}
}
}