0

前の質問のように、ボリューム データセットの .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);
4

1 に答える 1

0

投稿したコードから、 fread() 呼び出しは安全に見えますが、3D バイト配列がデータ構造の最良の選択であるかどうかを検討してください。

GLubyte を使用しているので、何らかのレンダリングを行っていると思います。もちろん、レンダリングを行うには、3D 空間で定義された頂点にアクセスする必要があります。それは次のことにつながります:

pVolume[vertIndex][vertIndex][vertIndex]  

これにより、キャッシュが常にスラッシングされます。メモリは、最初にすべての x が配置され、次にすべての y が配置され、次にすべての z が配置されます。したがって、x から y、z にジャンプするたびに、キャッシュ ミスが発生し、パフォーマンスが大幅に低下する可能性があります。

于 2012-02-21T21:08:31.750 に答える