|
|

楼主 |
发表于 2007-5-27 17:43:00
|
显示全部楼层
Re:资料整理了一番:关于无限LOD地形的构想(原创)
我写了一个自动拆分Map成为一个个小的tile文件的方法,很easy,美工可以解放出来了
//sourceFile源文件 destFile目标文件前缀(自动加编号) sourceWidth源文件宽,
//sourceHeight源文件高, splitsize分割尺寸
static bool SplitTileByRawMap(char *sourceFile, char * destFilePrefix,
int sourceWidth, int sourceHeight, int splitsize)
{
BYTE *buf = new BYTE[splitsize]; //一次读一行
::ZeroMemory(buf, splitsize);
FILE* pFIleDest;
FILE* pFileSrc;
pFileSrc=fopen(sourceFile, "rb"); //读取高度数据
if(!pFileSrc){
MessageBox(NULL,"读取源图失败","提示",0);
return FALSE;
}
int row = (sourceHeight - 1) / (splitsize -1);
int col = (sourceWidth - 1)/ (splitsize -1);
for(int i = 0; i < row; i ++)
{
for(int j = 0; j < col; j++)
{
rewind(pFileSrc); //从头开始读,读取下一个Tile
char filename[50];
sprintf(filename, "%s_%d_%d.raw", destFilePrefix, i, j);
pFIleDest = fopen(filename, "wb");
if(!pFIleDest){
MessageBox(NULL,"创建目标图形失败","提示",0);
return FALSE;
}
long pos = (i * (splitsize-1)) * sourceWidth + (splitsize -1) * j;
fseek(pFileSrc, pos, 1);
for(int k = 0; k < splitsize; k ++) //tile内的行计数
{
fread(buf, 1, splitsize, pFileSrc);
//printf("%d\t %d\t %d\t %d\t %d\t %d\t %d\t %d\t %d\t \r\n", buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],buf[8],buf[9]);
fwrite(buf, 1, splitsize, pFIleDest);
fseek(pFileSrc , sourceWidth - splitsize, 1);
}
// printf("\r\n");
fclose(pFIleDest);
}
}
fclose(pFileSrc);
return TRUE;
}
|
|