Как применить шейдер фрагментов только к одному объекту в OpenGL?

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

чтобы обеспечить фон для вопроса, я рисую простую сцену с домом и дорогой в 2d. Я обнаружил, как установить цвета каждого из моих объекты (основной корпус дома, окно и т. д.) Используя фиксированный графический конвейер, я просто не понимаю, как установить цвета с помощью шейдеров фрагментов.

любое уточнение было бы очень признательно, включая исправление, если я что-то неправильно понял.

2 ответов


чтобы обеспечить фон для вопроса, я рисую простую сцену с домом и дорогой в 2d. Я обнаружил, как установить цвета каждого из моих объектов (основной корпус дома, окно и т. д.) С помощью фиксированного графического конвейера, я просто не понимаю, как установить цвета с помощью шейдеров фрагментов.

как сказал Робертруани, сделайте цвет равномерным и измените его для каждого объекта.


Как применить шейдер фрагментов только к одному объекту в OpenGL?

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

см. это:https://gamedev.stackexchange.com/questions/22216/using-multiple-shaders


прежде чем рисовать объект с glDrawArrays или glDrawElements, передайте цвет шейдеру в качестве переменной.

http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml

пример шейдера фрагментов GLSL:

uniform vec4 u_color;

void main(void)
{
     gl_FragColor = u_color;
 }

Я бы расширил этот ответ, но я ленив. Надеюсь, это поможет. Есть много учебников в интернете, просто искать на GLSL, glUniform4f и т. д.