C-在1D字节数组中索引x,y,z坐标
我想评估曲面的值来实现行进四面体算法,但我不明白如何使用.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);
在(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的值主要用于validation: 0 <= z < DIMz
(使用数学而不是C表示法),并行0 <= x < DIMx; 0 <= y <= DIMy
0 <= x < DIMx; 0 <= y <= DIMy
。 z
的C表示法是0 <= z && z < DIMz
; 重复比照 x
和y
。