Как установить GL_RGBA в этом примере GLSL? - PullRequest
0 голосов
/ 03 декабря 2011

Я создаю следующий шейдер в GLSL, цель которого - смешать 2 текстуры в соответствии с альфа-каналом light_text.К сожалению, альфа-канал всегда установлен в 1 (хотя я уверен, что моя исходная текстура имеет значения, варьирующиеся от 0 до 1), я увидел в другом вопросе SO, что мне нужно где-то поставить флаг GL_RGBA, потому что он по умолчанию находится в GL_RGB, но гдея бы поставил это в своем примере?Вот код:

const vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
uniform sampler2D world_tex;
uniform sampler2D light_tex;
uniform float Alpha;
uniform vec3 NewColor;
void main()
{
    vec3 curColor = vec3(texture2D(world_tex, gl_TexCoord[0].xy ));
    vec3 lightColor = vec3(texture2D(light_tex, gl_TexCoord[0].xy ));

    float graylvl = dot(curColor , lumCoeff);

    vec3 appliedLight = lightColor + curColor;

    float coeff = texture2D(light_tex, gl_TexCoord[0].xy ).a;// <--- equals 1 always

    vec3 color_saturated     = mix(vec3(graylvl), curColor, Alpha);
    gl_FragColor   = vec4( mix(color_saturated + NewColor, appliedLight,  coeff) , 1.0);
}

спасибо

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Nowhere.Это параметр glTexImage2D, используемый при загрузке текстуры клиентом.

1 голос
/ 03 декабря 2011

Это необходимо установить за пределами кода GLSL в одном из ваших вызовов на glTexImage2D.Третий параметр принимает внутренний формат, который должен быть GL_RGBA, а также 7-й параметр, который определяет формат данных, которые вы помещаете в текстуру (7-й должен быть уже установлен, иначе вы не получите никакого полезного результата).

0 голосов
/ 15 февраля 2012

Кстати, если он дал хорошие результаты с GL_RGB, вы можете сначала проверить свою текстуру.Если изображение вашей текстуры было внутренним массивом RGBA, то, начиная со второго пикселя, вы получите шум, поскольку альфа-компонент должен быть интерпретирован как красный для второго пикселя и т. Д.

...