シャドウ マッピング手法を実装しようとしていますが、機能させるにはいくつか問題があります。
ライトの位置にカメラがあり、これが取得したシャドウ マップです。すべての頂点がそれぞれ で乗算されていますmodelViewProjectionMatrix
。
頂点のワールド位置を持つテクスチャもあります。ワールド空間にポイントをGL_RGBA32F
持つためにすべてのポイントがそれぞれ乗算されているため、これはテクスチャです。ModelMatrix
そしてシェーダー:
layout(binding=5) uniform sampler2D shadowMap;
layout(binding=6) uniform sampler2D positionMap;
in vec2 texcoord;
uniform mat uViewProjectionMatrix;
out vec4 color;
void main() {
vec4 pos = texture(positionMap, texcoord);
vec4 ShadowCoord = uViewProjectionMatrix * pos;
ShadowCoord.xy = ShadowCoord.xy * vec2(0.5,0.5) + vec2(0.5,0.5);
float a = texture(shadowMap, ShadowCoord.xy).z;
color = vec4(a, a, a, 1.0);
}
出力 (カメラはライトのほぼ同じ位置にあります):
各頂点の投影がカメラの位置から正しいかどうかを確認しようとしていますが、そうではないようです。このすべてのポイントは、比較することです。
if ( texture(shadowMap, ShadowCoord.xy).z < ( ShadowCoord.z-bias ) )
しかし、それも機能しません。
助けていただければ幸いです。ありがとうございました。