Как применить шейдер фрагментов только к одному объекту в 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 и т. д.