Как передать данные из вершинного шейдера во фрагментный шейдер без изменений? Мне нужно сказать вершинным пикселям, что они имеют этот цвет. Этот цвет я могу получить только в вершинном шейдере.
GLSL: вершинный шейдер для фрагментного шейдера без изменения
Ответы (2)
Вот хороший учебник по GLSL: учебник NeHe GLSL
Если вы хотите обмениваться данными между вершинными и фрагментными шейдерами, используйте один из встроенных типов, например gl_Color
Если вы хотите передать цвет, вычисленный вершинным шейдером, через фрагментный шейдер, вы должны создать фрагментный шейдер со следующей строкой: gl_FragColor = gl_Color
gl_Color
будет автоматически установлен для вас из цветов, записанных вершинным шейдером. Вы записываете цвет из вершинного шейдера, устанавливая одну из встроенных переменных, например gl_FrontColor
, или одну из ее аналогов: gl_BackColor
и т. д.
Вы должны использовать переменную, потому что на каждый фрагмент «влияет» более чем одна вершина (если вы не визуализируете GL_POINTS
), поэтому вам нужно интерполировать их по линии/многоугольнику. Последние версии GLSL позволяют задавать плоскую интерполяцию затенения, которая не интерполирует значение по всему примитиву, игнорируя значения из других вершин.
Я подозреваю, что вы хотите отобразить только пиксели, соответствующие вершинам, в другом цвете, это правильно? В этом случае это не так просто, вы, вероятно, захотите сначала отрендерить заполненные полигоны, а затем повторно отрендерить как GL_POINTS
. В этот момент переменные переменные не интерполируются, потому что на каждый фрагмент влияет одна вершина.