Реализация движения объекта по неровному ландшафту в 3D пространстве.

При разработке игры, в которой персонаж движется по неровной поверхности ландшафта в любом направлении, возникла проблема узнать, на какой высоте Z он должен находиться в текущих координатах xy.
Так как поверхность состоит из треугольников, значит первым делом нужно узнать внутри какого находиться в данный момент объект.
Основная суть — проекция 3D треугольника на плоскость

Проецируем треугольник на плоскость XY (синий треугольник) и XZ (коричневый треугольник). Соответственно известны все точки треугольника во всех плоскостях и Oxy (координата объекта на плоскости XY).
1. Вид сверху. Нужно узнать точки пересечения отрезков A1,B1 с Oxy,P и B1,C1 с Oxy,R.
В результате находим N и M, которые "разрезают" треугольник по горизонтали.
2. Вид сбоку. Пускаем лучи из N и M вверх до максимальной z координаты, образуя отрезки N,S и M,T. Находим точки пересечения K и L.
Осталось из точки Oxy также пустить вверх луч до максимальной z и найти между K и L точку пересечения Oxz.