Конечно, вы могли бы линейно интерполировать вдоль оси x и y, т.е. сначала интерполировать значение y для координат x, которые ниже и выше вашего фактического значения x в два раза - один раз для координаты y ниже, чем ваша фактическая значение y и один раз для значения y, превышающего фактическое значение y. Это дает вам два значения y, между которыми вы можете линейно интерполировать, чтобы получить высоту.
Чтобы найти наклон, вам нужно найти нормаль в этой точке. Чтобы найти нормаль, вы можете выполнить интерполяцию таким же образом. Для одного из исправлений (определяется четырьмя точками A: (x1, y1), B: (x2, y1), C: (x2, y2) и D: (x1, y2), x1
Линейная интерполяция нормали таким же образом, как и для высоты. Я не знаю, в каком формате вы хотите наклон, но если вы хотите, чтобы вектор указывал в направлении наклона, он был бы рассчитан как S = N - Up, где Up - просто вектор вверх (в этом примере (0,0,1), так как вы используете Z как вверх.
Другим подходом было бы объединить квадраты в треугольники, например, ABD и BCD. Тогда нормаль для всего треугольника будет AB x AD и BC x BD соответственно. В этом случае посмотрите на http://www.cc.gatech.edu/classes/AY2007/cs3451_spring/lininter.pdf, например, как интерполировать высоту в треугольнике. Этот подход дает вам гладкие треугольники, но есть заметные различия в наклоне между соседними треугольниками.