GLSL: вершинный шейдер для фрагментации шейдера без изменения

#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 будет установлен для вас автоматически.