Если задана дискретная карта высот, то можно найти высоту в любой точке {ax, az}, не находящейся в узле.
Делается это следующим образом:
x0, z0 : integer;
x1, z1 : integer;
dx, dz : float
Получаем узловые точки (clamp для того, чтобы не выйти за пределы карты)
x0 = clamp( trunc(ax), 0, MAP_SIZE );
z0 = clamp( trunc(az), 0, MAP_SIZE );
x1 = clamp( x0+1, 0, MAP_SIZE );
z1 = clamp( z0+1, 0, MAP_SIZE );
Получаем смещение
dx = ax - x0;
dz = az - z0
Теперь рассмотри два случая:
1. Когда dz > dx
return mesh[z1, x0].y + (1.0 - dz) * (mesh[z0, x0].y - mesh[z1, x0].y) + dx * (mesh[z1, x1].y - mesh[z1, x0].y)
2. Когда dx > dz
return mesh[z0, x1].y + dz * (mesh[z1, x1].y - mesh[z0, x1].y) + (1.0 - dx) * (mesh[z0, x0].y - mesh[z0, x1].y);
Удачи!
а, mesh[z0, x0], как я понимаю, - координаты точки в сетке?
Карта высот - вариант интересный. Сколько же их нужно, чтобы сделать полноценный мир?))) Вот то-то и оно, что до фига... Как вообще реализуется перемещение персонажа по ландшафту? То есть, каким будет унифицированное решение и для Morrowind ("одноэтажный мир") и для "многоуровневого" квейка?)))
а что если dz == dx ?? :) Нужно хоть пометку сделать, а то люди, которые заюзают пример, сделают обработку только двух вариантов.