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);

最佳答案

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

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

pVolume[vertIndex][vertIndex][vertIndex]


这将不断导致您的cahce被损坏。将首先对所有x进行布局,然后对所有y进行布局,然后对所有z进行布局。因此,每次您从x跳到y跳到z时,都可能会遇到缓存未命中和性能缓慢的问题。

09-27 19:46