Раскраска 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,

Другие вопросы по тегам