2017-02-10 11 views
0

Я пытаюсь реализовать зеркальное отражение, используя значения, взятые из оттенков серого, 1D текстуры как мультипликативный термин.Шейдер не черный, без света?

Я реализовал переключатель, чтобы я мог видеть разницу между ними, но по какой-то причине, когда выбранный цвет включен, области сцены без подсветки как светло-серый, где без выборки такие же области отображаются как черные.

Почему это? Вот область, где я устанавливаю цвет фрагмента.

if(u_specularRamp == 1) 
{ 
    specularAmount = clamp(specularAmount, 0.0, 1.0); 
    vec2 texCoords = vec2(specularAmount, 0.5); 
    vec4 sampledColor = texture(u_ramp_tex, texCoords); 
    specularReflection = vec3(0.3 * sampledColor.x); 
} 
else 
{ 
    specularReflection = vec3(0.3 * specularAmount); 
} 

FragColor = vec4(specularReflection, 1.0); 

u_specularRamp представляет собой целое равномерный Я передаю, чтобы переключить сэмпл цвет и выключается.

+0

'FragColor = vec4 (specularReflection, 1.0);' - это intetional для записи ** только ** зеркального цвета в качестве вывода? – Matso

+0

Очевидно, это зависит от текстуры, которую вы пробовали. И, по-видимому, текстура не черная на левом краю. –

+0

@Matso Да, это было так, что я мог более легко увидеть, что происходит. Это должно выводить черный цвет, где нет зеркальной подсветки, и это происходит, за исключением тех случаев, когда я беру выборку из текстуры. –

ответ

0

Я исправил проблему, на случай, если кто-нибудь столкнется с этой проблемой, это поведение было вызвано параметром текстуры, установленным в GL_REPEAT. Если вы хотите, чтобы черный был там, где нет света, установите этот параметр в GL_CLAMP_TO_EDGE