C-在1D字节数组中索引x,y,z坐标

时间:2012-02-21 02:27:30

标签: c dataset transformation volume-rendering

我想评估曲面的值来实现行进四面体算法,但我不明白如何使用.raw无格式数据。

将带有卷数据集的.raw文件加载到1D字节数组后,应该应用什么算术转换来获取与X,Y,Z相关的值?这是我知道加载.raw文件的唯一方法,我可以创建一个3D字节数组而不是这个吗?怎么样?

int XDIM=256, YDIM=256, ZDIM=256;
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);

1 个答案:

答案 0 :(得分:5)

在(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

在1D数组pData中的(x,y,z)处的数据位于:

pData[((x * DIMx) + y) * DIMy + z]

DIMz的值主要用于验证:0 <= z < DIMz(使用数学而不是C表示法),并行0 <= x < DIMx; 0 <= y <= DIMyz的C表示法是0 <= z && z < DIMz;对xy重复比照变通