0

与我之前的问题一样,我正在加载一个带有 .raw 文件的体积数据的一维数组。Jonathan Leffler 的回答被证明是有帮助的,但现在我正在使用不同维度的体积数据集(X、Y、Z 不一样)。How would the formula be generalized?

pVolume[((x * 256) + y) * 256 + z] // works when all dims are 256


int XDIM=256, YDIM=256, ZDIM=256; // I want this sizes to be arbitrary
const int size = XDIM*YDIM*ZDIM;
bool LoadVolumeFromFile(const char* fileName) {

    FILE *pFile = fopen(fileName,"rb");
   if(NULL == pFile) {
    return false;
   }

   GLubyte* pVolume=new GLubyte[size]; //<- here pVolume is a 1D byte array 
   fread(pVolume,sizeof(GLubyte),size,pFile);
   fclose(pFile);
4

1 回答 1

2

大步访问遵循一个简单的原则:

A[i][j][k] = B[k + j * Dim3 + i * Dim3 * Dim2];

// k = 1..Dim3,  (or 0 <= k < Dim3, as one does in C)
// j = 1..Dim2,
// i = 1..Dim1.

B是一个大小为 的一维数组Dim1 * Dim2 * Dim3。该公式显然可以推广到任意多个维度。如果您想要助记符,请从禁食索引开始求和,然后在每个求和中进一步乘以前一个维度的范围。

于 2012-02-21T23:09:19.867 回答