2

シャドウ マッピング手法を実装しようとしていますが、機能させるにはいくつか問題があります。

ライトの位置にカメラがあり、これが取得したシャドウ マップです。すべての頂点がそれぞれ で乗算されています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 ) )

しかし、それも機能しません。

助けていただければ幸いです。ありがとうございました。

4

1 に答える 1