Отверстия на местности на основе карты высот с использованием Directx11

В настоящее время я работаю над ландшафтом в форме цилиндра, созданным картой высот.
То, что происходит в программе, просто, есть текстура для цветов ландшафта, которая имеет альфа-значение областей, в которых я хочу, чтобы она была невидимой, и другая текстура ARGB, где А — это шкала серого для высот, а RGB — это нормаль для света.
Текстура такова, что значение A изменяется от 1 до 255, и я резервирую 0 для областей с отверстиями, то есть я не хочу, чтобы они существовали.
Таким образом, в теории нет проблем, я делаю эти области невидимыми на основе первой текстуры, но на практике происходит то, что программа рассматривает 0 как минимальную высоту и, даже с текстурой сверху, создает несколько линий к этому области 0, как попытка сделать его треугольник, но не попасть туда, потому что я вырезал следующую вершину, сделав ее невидимой.
Обратите внимание на линии, идущие к центру цилиндра
Вот как это получается, когда я прекращаю делать эти вершины невидимыми

Обратите внимание на линии, идущие к центру цилиндра
Вот как это получается, когда я прекращаю делать эти вершины невидимыми

Итак, просто сказать, что я использовал функцию Clip () в пиксельном шейдере, чтобы сделать его невидимым.

В основном, что мне нужно помочь:
Возможно ли, так же, как я использую clip () в пиксельном шейдере, я делаю что-то подобное в вершинном шейдере и избавляюсь от нежелательной вершины?
В принципе, можно просто сказать игнорировать значение 0?
Есть идеи, чтобы это исправить? Я думал о том, чтобы все вершины, которые равны 0, стали ценностью его соседа, чтобы эти линии шли не в центр, а в ту же плоскость, что и сам цилиндр.
Другое дело, что мы можем видеть, что программа интерполирует значения из одной вершины в другую, поэтому я прорезаю на полпути до невидимой вершины

Я работаю с Directx11 API с C ++, и программа использует тесселяцию.

Спасибо за потраченное время и буду очень рад любым комментариям по этому поводу!

1

Решение

Ну, я немного решил эту проблему.
Я сделал текстуру со значениями высоты проходящей через модификатор, который создал другую текстуру с нулевыми значениями, замененными боковым пикселем значением, отличным от нуля, или изменением на 128.0f.
с этим это сделало странное направление линий более точным не в направлении к центру цилиндра, а вдоль линии.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]