Расчет нормалей вершин по карте высот.
Автор: A T
Я столкнулся с проблемой расчета нормалей для карты высот, используемой, например, для ландшафта или водной поверхности. При использовании стандартного метода, усреднения всех смежных с поверхностью нормалей после триангуляции карты высот, расчет показался мне очень медленным, что особенно заметно на больших кортах высот, и при частом расчете, например каждый кадр для водной поверхности.
Здесь, я хочу вам показать пример расчета нормалей, базирующийся исключительно на карте высот (похоже на конвертирование карты высот в карту нормалей). Для расчета нормали в каждой вершине я беру 4 значения (слева, справа, сверху и снизу из текущей карты высот), что дает мне приблизительный наклон по направлениям X и Z. Эти значения являются двумя "2D" нормалями (одна по Х, другая по Z). Теперь, все что мне нужно, это найти 3D вектор, который при проецировании на плоскости X=0, Z=0 дает тот же уклон, что и "2D" нормали, и нормализовать его. Надеюсь, приведенный ниже код, поможет вам лучше понять мою идею. Этот метод должен работать намного быстрее, чем методы, использующие векторные произведения.
( Нормали, рассчитанные этим методом, не зависимы от триангуляции карты высот, ввиду этого, они могут не быть в точности такими же, как нормали полученные методом усреднения, но на результатах это сказывается не сильно. )