Загрузка трехмерного байтового массива из файла .raw - PullRequest
0 голосов
/ 21 февраля 2012

Как и в моем предыдущем вопросе , я заинтересован в загрузке файла .raw набора данных томов в массив байтов.Я думаю, что использование трехмерного байтового массива облегчит индексирование координат 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);

1 Ответ

0 голосов
/ 22 февраля 2012

Из кода, который вы опубликовали, вызов fread () выглядит безопасным, но подумайте, является ли трехмерный байтовый массив лучшим выбором для структуры данных.

Я предполагаю, что вы делаете какой-то рендеринг, когда вы используете GLubyte.И, конечно же, для выполнения любого рендеринга вам необходим доступ к вершине, определенной в трехмерном пространстве.Это приведет к:

pVolume[vertIndex][vertIndex][vertIndex]  

Это будет постоянно приводить к перебоям в вашей команде.В память будет выкладываться сначала все xs, затем все ys, а затем все zs.Таким образом, каждый раз, когда вы переходите от x к y к z, вы можете столкнуться с промахом кэша и очень медленным перфом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...