Я пытаюсь понять настройку цветов текстур с помощью фрагментарного шейдера. Мой фрагментарный шейдер супер прост:
uniform sampler2D sampler;
void main() {
vec4 tex = texture2D ( sampler, uvVarying );
gl_FragColor = vec4(tex.r, tex.g, tex.b, tex.a);
}
Это рисует мою текстуру собаки, как и ожидалось:
если затем изменить шейдер на
gl_FragColor = vec4(tex.r, tex.g, tex.b, 1.0);
результат - это то, что я ожидал, информация о прозрачности теряется:
но если я вместо этого поставлю его на:
gl_FragColor = vec4(tex.r, tex.g, tex.b, 0.0);
Я ожидал, что он полностью исчезнет, но вместо этого я получаю:
Что происходит?
И к моей оригинальной проблеме: я хотел добавить немного красного оттенка к моей текстуре с помощью:
gl_FragColor = vec4(tex.r + 0.5, tex.g, tex.b, tex.a);
Теперь я ожидал, что у него будет такая же информация о прозрачности, что и исходная текстура, но вместо этого я получаю следующее:
Что мне здесь не хватает. Текстура использует смещение по умолчанию для двигателя, который равен src = GL_ONE, dst = GL_ONE_MINUS_SRC_ALPHA
.