|
|
我在看<<学OpenGL编3D游戏_CAI\A05_开天辟地>>里面的地形漫游程序,
他里面有个函数是用来根据x,和z值取得高度的,这样就可以漫游了.
基本算法就是根据周围的4个点,插值得到.
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);
float ty =CameraZ - int(CameraZ);
float txty = tx * ty;
return h00*(1.0f-ty-tx+txty)
+ h01*(tx-txty)
+ h11*txty
+ h10*(ty-txty);
}
h00,h01,h11,h10,是周围4个点的高度,tx,ty是离h00的x,y的值.我不明白
return h00*(1.0f-ty-tx+txty)
+ h01*(tx-txty)
+ h11*txty
+ h10*(ty-txty);
这个公式是如果推导出来的,请高手指点
|
|