2012-02-21 43 views
0

As in my previous question,我想將卷數據集的.raw文件加載到字節數組中。我認爲在索引X,Y,Z座標時,使用3D字節數組會使事情變得更簡單,但我不確定我應該使用何種讀取大小來加載音量。這個大小聲明是否允許我正確地爲卷數據建立索引?從.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[XDIM][YDIM][ZDIM]; 
    fread(pVolume,sizeof(GLubyte),size,pFile); // <-is this size ok? 
    fclose(pFile); 
+1

嚴格地說,你的代碼示例是C++,而不是C(因爲它使用'new')。假設文件中有足夠的數據,該大小將從文件中讀取足夠的字節以填充* pVolume。但是我可能會將其聲明爲'size = sizeof(GLubyte [XDIM] [YDIM] [ZDIM])',以防萬一您改變爲16,32的n位數據類型。 – 2012-02-21 19:51:23

回答

0

從你發佈的fread()調用的代碼看起來是安全的,但考慮一下3D字節數組是否是數據結構的最佳選擇。

我假設你正在使用GLubyte進行某種渲染。當然,您還需要進行渲染,以訪問3D空間中定義的頂點。這將導致:

pVolume[vertIndex][vertIndex][vertIndex] 

這將不斷導致你的cahce被擊敗。記憶將首先佈置所有的x,然後是所有的ys,然後是所有的zs。因此,每當你從x跳到y到z時,你可能會遇到一個緩存未命中並且真的很慢的性能。