3

我想评估曲面的值以实现行进四面体算法,但我不明白如何使用 .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);
4

1 回答 1

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

一维数组中 (x, y, z) 处的基准位于pData

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

DIMz 的值主要用于验证:(0 <= z < DIMz使用数学而不是 C 符号),并且并行0 <= x < DIMx; 0 <= y <= DIMy。的 C 符号z0 <= z && z < DIMz; 对和重复比照xy

于 2012-02-21T02:56:55.293 回答