|
看了唐明理的游戏编程 第五章时 开天辟地
用双直线插值求高度 我困惑了好久资料也找不到 相关记载
部分代码如下:
float baiscobj::GetHeight(float x, float z)// 取地面高度
{ float CameraX = x/MAP_SCALE; //计算在那一块
float CameraZ =-z/MAP_SCALE; //计算在那一块
int Col0 = int(CameraX); //块的列号
int Row0 = int(CameraZ); //块的行号
int Col1 = Col0 + 1; //相邻列
int Row1 = Row0 + 1; //相邻行
if (Col1 > MAP_W) Col1 = 0; //相邻列大于地块数,取首列
if (Row1 > MAP_W) Row1 = 0; //相邻行大于地块数,取首行
float h00=g_terrain[Col0 + Row0*MAP_W][1];//获取块四角的高度
float h01=g_terrain[Col1 + Row0*MAP_W][1];
float h11=g_terrain[Col1 + Row1*MAP_W][1];
float h10=g_terrain[Col0 + Row1*MAP_W][1];
float tx =CameraX - int(CameraX); //求块内X偏移位置
float ty =CameraZ - int(CameraZ); //求块内Z偏移位置
float txty = tx * ty; //以下为双线性插值(内插)计算
return h00*(1.0f-ty-tx+txty)
+ h01*(tx-txty)
+ h11*txty
+ h10*(ty-txty); //返回插值计算值,为所求点的高度。
}
这是什么意思啊? 哪位好心高手帮我解释一下,解救我与颓废之中!!不胜感激啊!!!1 |
|