2017-02-10 7 views
0

私は、グレイスケールの1Dテクスチャからサンプリングされた値を乗法項として使用して鏡面反射を実装しようとしています。シェーダは光がない黒を描いていませんか?

私は2つの違いを見ることができるようにトグルを実装しましたが、サンプリングされた色が有効な何らかの理由で、ライトがないシーンの領域はライトグレーとして表示されます。同じ領域が黒色で表示されます。

これはなぜですか?ここで私が断片色を設定している領域があります。

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);' - **出力するスペキュラカラー**のみです。 – Matso

+0

明らかに、これはサンプルのテクスチャによって異なります。そして、明らかに、テクスチャは左端で黒ではありません。 –

+0

@Matsoはい、これは、私がより簡単に何が起こっていたかを見ることができたためです。これは鏡面ハイライトがないところでは黒を出力し、テクスチャからサンプリングする場合を除いて出力します。 –

答えて

0

誰もがこの問題に遭遇した場合、GL_REPEATに設定されているテクスチャパラメータが原因でこの問題が発生しました。ライトがないところで黒を使用する場合は、そのパラメータをGL_CLAMP_TO_EDGEに設定してください。

関連する問題