То, как вы индексировали бы данные в (x, y, z):
pVolume[((x * 256) + y) * 256 + z]
За кадром, это то, что компилятор C делает для вас, если вы пишете:
GLuByte array[256][256][256];
array[x][y][z]
Это работает только потому, что C индексирует от 0;если язык индексируется из 1, вам придется пересмотреть вычисление, чтобы получить чистый результат, полученный путем вычитания одного из каждого из x, y и z перед выполнением индексации.
Вспомогательный вопрос
Можете ли вы обобщить формулу для произвольных измерений?
Дано (где числовые значения на самом деле не имеют значения):
DIMx = 256
DIMy = 128
DIMz = 64
данные в(x, y, z) в массиве 1D pData
находится по адресу:
pData[((x * DIMx) + y) * DIMy + z]
Значение DIMz служит главным образом для проверки: 0 <= z < DIMz
(с использованием математической, а не C-нотации) и параллельно0 <= x < DIMx; 0 <= y <= DIMy
.Обозначение C для z
равно 0 <= z && z < DIMz
;повторите mutatis mutandis для x
и y
.