0

与我之前的问题一样,我有兴趣将卷数据集的 .raw 文件加载到字节数组中。我认为在索引 X、Y、Z 坐标时使用 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[XDIM][YDIM][ZDIM]; 
   fread(pVolume,sizeof(GLubyte),size,pFile); // <-is this size ok? 
   fclose(pFile);
4

1 回答 1

0

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

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

pVolume[vertIndex][vertIndex][vertIndex]  

这将不断地导致您的 cahce 受到打击。内存将首先排列所有 xs,然后是所有 ys,然后是所有 zs。因此,每次从 x 跳到 y 再到 z 时,您可能会遇到缓存未命中并且性能非常缓慢。

于 2012-02-21T21:08:31.750 回答