As in my previous question,我正在使用.raw文件的体积数据加载一维数组。 Jonathan Leffler的答案证明是有帮助的,但现在我正在处理不同维度的体积数据集(X,Y,Z不相同)。 How would the formula be generalized?
pVolume[((x * 256) + y) * 256 + z] // works when all dims are 256
int XDIM=256, YDIM=256, ZDIM=256; // I want this sizes to be arbitrary
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);
答案 0 :(得分:2)
大步进入遵循一个简单的原则:
A[i][j][k] = B[k + j * Dim3 + i * Dim3 * Dim2];
// k = 1..Dim3, (or 0 <= k < Dim3, as one does in C)
// j = 1..Dim2,
// i = 1..Dim1.
此处B
是一个大小为Dim1 * Dim2 * Dim3
的一维数组。该公式明显地推广到任意多个维度。如果你想要一个助记符,用空口索引开始求和,并在每个求和中再乘以前一个维度的范围。