我正在编写BC1纹理压缩器,该压缩器压缩独立的4x4像素像素。我正在拍摄2D图像,并将其转换为4x4 texel块的2D网格,即2D到4D。实际上,它是从5D到3D,因为每个texel具有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];
}
}
}
}