2012-02-21 5 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을 채우기에 충분한 바이트를 파일에서 읽을 것입니다. 그러나 16, 32, n-bit 데이터 유형으로 변경 한 경우에만 size = sizeof (GLubyte [XDIM] [YDIM] [ZDIM])로 선언 할 수 있습니다. –

답변

0

fread() 호출을 게시 한 코드는 안전하지만 3D 바이트 배열이 데이터 구조의 최상의 선택인지 고려하십시오.

GLubyte를 사용하면서 어떤 종류의 렌더링을하고 있다고 가정합니다. 물론 3D 공간에 정의 된 꼭지점에 액세스해야하는 렌더링을 수행해야합니다. 그러면 다음으로 연결됩니다.

pVolume[vertIndex][vertIndex][vertIndex] 

이렇게하면 끊임없이 피해를 당하게됩니다. 메모리는 모든 xs가 먼저 배치 된 다음 모든 ys가 배치되고 모든 zs가 배치됩니다. 따라서 x에서 y로 z 이동할 때마다 캐시 미스가 발생하여 성능이 느려질 수 있습니다.

관련 문제