Раскраска 3D объектов
В моей сцене много объектов, и я хочу покрасить каждый объект разными цветами. Теперь мой фрагментный шейдер состоит из:
void main (void)\
{\
gl_FragColor = vec4(0.82, 0.41, 0.12 ,1.0);\
}";
и вершинный шейдер состоит из:
attribute highp vec4 myVertex;\
uniform mediump mat4 myPMVMatrix;\
void main(void)\
{\
gl_Position = myPMVMatrix * myVertex;\
}";
и, следовательно, он окрашивает каждый объект в один цвет. Может кто-нибудь сказать, как я могу по-разному раскрасить? Я подготовил 2D-массив, состоящий из цветов для всех объектов. Я не могу понять, как передать их фрагментному шейдеру или как изменить код фрагментного шейдера и вершинного шейдера?
1 ответ
Лучший способ покрасить объекты по отдельности - пройти униформу (как вы это делали с myPMVMatrix
) содержащий нужный цвет для каждого объекта. Вы бы имели uniform vec4 objectColor
во фрагментном шейдере, который вы можете использовать напрямую gl_FragColor
,
Фрагмент шейдера будет выглядеть так:
uniform mediump vec4 myColor;\
void main (void)\
{\
gl_FragColor = myColor;\
}";
и вы бы передать его точно так же, как вы передали myPMVMatrix
просто со словом myColor
вместо myPMVMatrix
,