我想通过Perlin噪音生成地形并将其存储到.raw文件中。
从Nehe's HeightMap tutorial我知道.raw文件的读取方式如下:
#define MAP_SIZE 1024
void LoadRawFile(LPSTR strName, int nSize, BYTE *pHeightMap)
{
FILE *pFile = NULL;
// Let's open the file in Read/Binary mode.
pFile = fopen( strName, "rb" );
// Check to see if we found the file and could open it
if ( pFile == NULL )
{
// Display our error message and stop the function
MessageBox(NULL, "Can't find the height map!", "Error", MB_OK);
return;
}
// Here we load the .raw file into our pHeightMap data array.
// We are only reading in '1', and the size is the (width * height)
fread( pHeightMap, 1, nSize, pFile );
// After we read the data, it's a good idea to check if everything read fine.
int result = ferror( pFile );
// Check if we received an error.
if (result)
{
MessageBox(NULL, "Can't get data!", "Error", MB_OK);
}
// Close the file.
fclose(pFile);
}
pHeightMap
是一维的,所以我不明白如何将x,y对应写入高度值。我打算使用libnoise或noise2 function on Ken Perlin's page来使1024x1024矩阵中的每个值对应于该点的高度,但.raw文件存储在单个维度中,我该怎么办?让x,y通信在那里工作?
答案 0 :(得分:1)
设A是具有相同尺寸的二维数组:
A[3][3] = {
{'a', 'b', 'c'},
{'d', 'e', 'f'},
{'g', 'h', 'i'}
}
您也可以将此矩阵设计为单维数组:
A[9] = {
'a', 'b', 'c',
'd', 'e', 'f',
'g', 'h', 'i'
}
在第一种情况(二维)中,使用类似于A[1][0]
的表示法访问第二个数组中的第一个元素。但是,在第二种情况(1维)中,您将使用类似于A[1 * n + 0]
的表示法访问同一元素,其中n
是每个逻辑包含的数组的长度,在这种情况下为3 。请注意,您仍然使用相同的索引值(1和0),但对于单维情况,您必须为偏移量包含该乘数n
。