2017-01-25 18 views
0

私はGLSLの2D照明に取り組んでいますが、修正できないバグがあるようです。 私のライトは、シーンに複数のライトがある場合にオーバーラップするこれらの奇妙な "レイヤー"を生成します。 You can see the problem around the lightsGLSLの奇妙な照明

マイシェーダコードは非常に単純です:

uniform vec2 lightLocation[6]; 
uniform vec3 lightColor[6]; 
uniform float lightRadius[6]; 
uniform sampler2D texture0; 

void main() { 

    float distance; 
    float attenuation; 
    vec4 color; 
    vec4 finalColor = vec4(0, 0, 0, 1); 
    for (int i = 0; i < 6; ++i) { 
     distance = length(lightLocation[i] - gl_FragCoord.xy); 
     attenuation = 4.0/(1.0 + 10.0*(distance/lightRadius[i])); 
     color = vec4(attenuation, attenuation, attenuation, pow(attenuation, 3)) * vec4(lightColor[i], 1); 
     finalColor = finalColor + color; 
    } 

    gl_FragColor = finalColor * texture(texture0, gl_TexCoord[0].st); 
} 

はayoneこの問題の原因を知っていますか?

+0

指定された距離の後に減衰をクランプしようとしますか? – Zouch

+0

実際に私はあなたの問題を再現することができません、私は[shadertoyの何かsimilair](https://www.shadertoy.com/view/MlySzd)を試しましたが、あなたがここに示しているもののようなものはありません。 'texture0'には何がありますか?なぜあなたのカラーでアルファを使用しますか?いくつかのブレンドをしていますか? – Zouch

+0

@Zouch感謝の意を表明し、問題の再現を試みてくれてありがとう。 Texture0は私のスプライトシートで、私のゲームのタイルが含まれています。スプライトシートをバインドし、フレームあたり〜200タイルをレンダリングします。私の色のアルファは私の間違いで、私はそれを削除しました。私はあなたのコードを私と同じくらい正確に編集しました。これは完璧に機能し、シェイダー問題ではないと私は信じています。他のコードを投稿したいですか? これまでにありがとうございました! 編集:テクスチャを無効にしても問題は解決しません。 – TheDarkShado

答えて

1

問題はシェーダではないことが分かりました(Shadertoyを使用してZouchに感謝してくれてありがとう)。

私は誤ってライトを1回ではなく2回描きました。