簡體   English   中英

C-在1D字節數組中索引x,y,z坐標

[英]C- Indexing x,y,z coordinates in a 1D byte array

我想評估曲面的值來實現行進四面體算法,但我不明白如何使用.raw無格式數據。

將帶有卷數據集的.raw文件加載到1D字節數組后,應該應用什么算術轉換來獲取與X,Y,Z相關的值? 這是我知道加載.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[size]; //<- here pVolume is a 1D byte array 
   fread(pVolume,sizeof(GLubyte),size,pFile);
   fclose(pFile);

在(x,y,z)索引數據的方式是:

pVolume[((x * 256) + y) * 256 + z]

在幕后,這就是C編譯器為您編寫的內容:

GLuByte array[256][256][256];

array[x][y][z]

它的作用只是因為C索引從0開始; 如果語言從1開始索引,則必須修改計算以獲得通過在進行索引之前從x,y和z中的每一個中減去一個而獲得的凈結果。


輔助問題

你能概括出任意尺寸的公式嗎?

給定(數值不重要):

DIMx = 256
DIMy = 128
DIMz =  64

1D數組pData中(x,y,z)的數據位於:

pData[((x * DIMx) + y) * DIMy + z]

DIMz的值主要用於驗證: 0 <= z < DIMz (使用數學而不是C表示法),並行0 <= x < DIMx; 0 <= y <= DIMy 0 <= x < DIMx; 0 <= y <= DIMy z的C表示法是0 <= z && z < DIMz ; 重復比照 xy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM