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时,都可能会遇到缓存未命中和性能缓慢的问题。