Вычисление нормалей для карты высот
У меня есть небольшая проблема с вычислением нормалей для моей карты высоты. У него странное поведение. В верхней и нижней точках нормали хороши, но в середине они кажутся неправильными. Они освещаются точечным светом. 
НЕЗАФИКСИРОВАННЫЙ ИСТОЧНИК УДАЛЕН
Править:
Попробовал 2 новых подхода:
Это в лицо-нормально. Это выглядит прекрасно, но вы видите одинокие лица.
Position normal = crossP(vectorize(pOL, pUR), vectorize(pOR, pUL));
Я также пытался сделать это для каждой вершины таким образом, но также со странным выход.
Вот какое предложение сделал Нико:
Это выглядит также довольно странно. Может быть, это ошибка, как я рассчитываю точки помощи.
НЕЗАФИКСИРОВАННЫЙ ИСТОЧНИК УДАЛЕН
Правка 2:
Определение моих точек зрения:
OL, или, UL, UR-угловые вершины плоскости, которая должна быть нарисована.
postVertPosZ1 postVertPosZ2
preVertPosX1 pOL pOR postVertPosX1
preVertPosX2 pUL pUR postVertPosX2
preVertPosZ1 preVertPosZ2
EDIT3:
Теперь я решил ее. Это была глупая ошибка.:
Я забыл умножить значение y помогающих вершин на множитель высоты и должен был изменить некоторые значения.
1 ответ:
Существует множество способов решить эту проблему. Я не сталкивался с вашим. Я предлагаю использовать центральные различия для оценки частных производных поля высоты. Затем используйте перекрестное произведение, чтобы получить нормальное:
Каждую Нормаль вершины можно вычислить по ее четырем соседям. Вам не нужен самолет плюс его соседи:
T L O R B
Oявляется вершиной, для которой требуется вычислить Нормаль. Остальные вершины (верхняя, правая, нижняя, левая) являются ее соседями. Тогда мы хотим, чтобы вычислите центральные различия в горизонтальном и вертикальном направлении:Нормаль - это поперечное произведение этих касательных:/ 2 \ horizontal = | height(R) - height(L) | \ 0 / / 0 \ vertical = | height(B) - height(T) | \ 2 /Обратите внимание, что эти вычисления предполагают, что ваша ось x выровнена вправо, а ось z-вниз.normal = normalize(cross(vertical, horizontal)) / / height(L) - height(R) \ \ = normalize | | 2 | | \ \ height(T) - height(B) / /



Comments