スクリーンスペースローカルリフレクション(SSLR)実装してるんですが・・・。なんとなくでるところまではいったけど・・・。
うまくいかないわー。もーいやわー。
レイトレースのfragシェーダ。だいぶ簡素化してあります。おかしいと思われる原因がありすぎて・・・ちょっと寝かせよう・・・。
vec4 RayTrace(in vec3 startP,in vec3 endP){ vec4 startSSP = uProjectionMatrix*vec4(startP,1.0); startSSP.xy /= startSSP.w; startSSP.xy = startSSP.xy * 0.5 + 0.5; vec4 endSSP = uProjectionMatrix*vec4(endP,1.0); endSSP.xy /= endSSP.w; endSSP.xy = endSSP.xy * 0.5 + 0.5; vec3 vecSS = (endSSP.xyz - startSSP.xyz); vecSS.z=endP.z-startP.z; vecSS*=length(texelSize)/length(vecSS.xy); vec3 sampleP = vec3(0.0); float sampleDepth = 0.0; float diffZ = 0.0; vec4 color = vec4(0.0); for (int i = 1; i < 100 ; i++){ sampleP.xy = startSSP.xy + vecSS*i; sampleP.z = startP.z + vecSS.z*i; if(sampleP.x < 0 || sampleP.x > 1 || sampleP.y < 0 || sampleP.y > 1 || sampleP.z < 0 || sampleP.z > uNearFar.y ){ break; } sampleDepth =linearizeDepth(texture(depthTexture, sampleP.xy).r, uNear,uFar); diffZ = sampleP.z - sampleDepth; float error = length(vecSS); if (diffZ>=0&& diffZ<error) { color = texture(colorBufferTexture, sampleP.xy); break; } } return color; }