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);
答案 0 :(得分:0)
从您发布的代码中,fread()调用似乎是安全的,但请考虑3D字节数组是否是数据结构的最佳选择。
我假设您正在使用GLubyte进行某种渲染。当然,要进行任何渲染,您需要访问3D空间中定义的顶点。这将导致:
pVolume[vertIndex][vertIndex][vertIndex]
这将不断导致你的骚扰。将记忆所有的xs,然后是所有的ys,然后是所有的zs。因此,每次从x跳到y到z时,您可能会遇到缓存未命中并且确实会降低性能。