GLSL: вершинный шейдер для фрагментации шейдера без изменения - PullRequest
0 голосов
/ 05 мая 2011

Как перенести данные из вершинного шейдера в фрагментный шейдер без изменений? Мне нужно сказать пикселям вершины, что они имеют этот цвет. Этот цвет я могу получить только в вершинном шейдере.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Вы должны использовать вариацию, потому что на каждый фрагмент "влияет" более чем одна вершина (если вы не рендерите GL_POINTS), поэтому вы должны интерполировать их по линии / многоугольнику. Последние версии GLSL позволяют задавать интерполяцию с плоским затенением, которая не интерполирует значение по всему примитиву, игнорируя значения из других вершин.

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

2 голосов
/ 05 мая 2011

Вот хороший учебник по GLSL: NeHe Учебник GLSL

Если вы хотите обмениваться данными между вершинными и фрагментными шейдерами, используйте один из встроенных типов, например gl_Color

Если вы хотите пройти через цвет, вычисленный вершинным шейдером, через фрагментный шейдер, вы бы создали фрагментный шейдер со следующей строкой: gl_FragColor = gl_Color

gl_Color будет автоматически установлендля вас из цветов, написанных вершинным шейдером.Вы пишете цвет из вершинного шейдера, устанавливая одну из встроенных переменных, например gl_FrontColor, или один из его пиров: gl_BackColor и т. Д.

...