#glsl #fragment-shader #vertex-shader
#glsl #фрагмент-шейдер #вершинный шейдер
Вопрос:
Как перенести данные из вершинного шейдера во фрагментный шейдер без изменений? Мне нужно сказать пикселям вершины, что они имеют этот цвет. Этот цвет я могу получить только в вершинном шейдере.
Комментарии:
1. Что вы имеете в виду, говоря «этот цвет я могу получить только в вершинном шейдере.?» Обычно вы можете использовать значения цвета во фрагментном шейдере, которые создаются вершинным шейдером. Итак, я не уверен, о чем вы спрашиваете.
2. Извините, это опечатка.) @DasBoot «Обычно вы можете использовать значения цвета во фрагментном шейдере, которые создаются вершинным шейдером». — Как это сделать? Я имею в виду, как это перенести.
Ответ №1:
Вы должны использовать переменную, потому что на каждый фрагмент «влияет» более одной вершины (если вы не выполняете рендеринг GL_POINTS
), поэтому вам приходится интерполировать их по линии / полигону. Последние версии GLSL позволяют задавать интерполяцию плоского затенения, которая не интерполирует значение по всему примитиву, игнорируя значения из других вершин.
Я подозреваю, что вы хотите сделать, это отобразить другим цветом только пиксели, соответствующие вершинам, это правильно? В таком случае это не так просто, вы, вероятно, захотите сначала отобразить заполненные полигоны, а затем повторно отобразить как GL_POINTS
. На этом этапе изменяющиеся переменные не интерполируются, потому что на каждый фрагмент влияет одна вершина.
Ответ №2:
Вот хороший учебник по GLSL: новый учебник по GLSL
Если вы хотите совместно использовать данные между вершинным и фрагментным шейдерами, используйте один из встроенных типов, например gl_Color
Если вы хотите передать цвет, вычисленный вершинным шейдером, в через фрагментный шейдер, вы должны создать фрагментный шейдер со следующей строкой: gl_FragColor = gl_Color
gl_Color
будут автоматически настроены для вас на основе цветов, написанных вершинным шейдером. Вы записываете цвет из вершинного шейдера, задав одну из встроенных переменных, например gl_FrontColor
, или одну из ее аналогов: gl_BackColor
и т.д.
Комментарии:
1. Я думаю, что это не работает, я не вижу результата, и вершинный шейдер возвращает: предупреждение C7564: присвоение атрибуту gl_Color
2. Правильно. Следовало бы упомянуть, что вы должны установить gl_FrontColor (или один из его аналогов, таких как gl_BackColor ) в вершинном шейдере. Цвет gl_Color будет установлен для вас автоматически.