Сбросить вершину в вершинном шейдере Unity - PullRequest
0 голосов
/ 04 января 2019

В моей ситуации у меня есть сетка сетки в Unity, и я хочу отбросить некоторые вершины в вершинном шейдере.«Сбросить вершину» означает, что ни вершина, ни связанные с ней линии не будут нарисованы.

Я реализовал это случайно, но я думаю, что это не элегантный и не безопасный способ.Мой способ состоит в том, чтобы установить часть позиции y на недопустимое число, то есть 1.0 / 0.

Вот часть моего кода:

    // count may be 0, but no crash, and the point will not be drawn, seems all good.
    sum /= count;
    pos.y = sum;
    o.pos = UnityObjectToClipPos(pos);
    return o;

Вот мой результат:

my result

Это показывает, что некоторыевершины и связанные с ними линии в зеленом поле не отображаются.

Мне интересно, есть ли другой элегантный и безопасный способ.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

вы можете изменить поток вершин на этапе, называемом «геометрический шейдер», в вершинном шейдере вы можете изменять только значения, передаваемые интерполяторам, которые подают фрагментный шейдер

0 голосов
/ 04 января 2019

Из спецификации opengl:

Аналогично, обработка таких условий, как деление на 0, может привести к неопределенному результату, но ни в коем случае такое условие не должно приводить к прерыванию или прекращению обработки.

Нельзя отбросить вершину в вершинном шейдере, вершины все еще здесь.

...