从.raw文件加载3D字节数组

时间:2012-02-21 19:37:00

标签: c++ c dataset volume-rendering

As in my previous question,我有兴趣将卷数据集的.raw文件加载到字节数组中。我认为使用3D字节数组会在索引X,Y,Z坐标时使事情变得更容易,但我不确定我应该用来加载音量的读取大小。这个大小声明是否允许我正确地索引卷数据?

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[XDIM][YDIM][ZDIM]; 
   fread(pVolume,sizeof(GLubyte),size,pFile); // <-is this size ok? 
   fclose(pFile);

1 个答案:

答案 0 :(得分:0)

从您发布的代码中,fread()调用似乎是安全的,但请考虑3D字节数组是否是数据结构的最佳选择。

我假设您正在使用GLubyte进行某种渲染。当然,要进行任何渲染,您需要访问3D空间中定义的顶点。这将导致:

pVolume[vertIndex][vertIndex][vertIndex]  

这将不断导致你的骚扰。将记忆所有的xs,然后是所有的ys,然后是所有的zs。因此,每次从x跳到y到z时,您可能会遇到缓存未命中并且确实会降低性能。