私はFBOとGLSLでシャドウマップを実装しています。 高さフィールドで使用されます。それはいくつかのオブジェクト(木、植物、...)が高さの欄に影を投げかけます。OpenGL:ShadowMapping:影がy = 0にしか表示されない
私が持っている問題は、影がハイフィールドの地面にしか見えないということです。つまり、高さフィールドの高さ= 0です。高さがあるとすぐに、影が消えます。シャドーマップそのものを見ると、すべてがうまく見えます...ライトに近いオブジェクトは暗くなります。
は、ここに私のGLSLのvertexshaderです:
uniform mat4 lightView, lightProjection;
const mat4 biasMatrix = mat4( 0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
0.0, 0.0, 0.5, 0.0,
0.5, 0.5, 0.5, 1.0); //bias from [-1, 1] to [0, 1]
void main()
{
gl_Position = ftransform();
mat4 shadowMatrix = biasMatrix * lightProjection * lightView;
shadowTexCoord = shadowMatrix * gl_Vertex;
}
fragmentshader:
uniform sampler2DShadow shadowmap;
varying vec4 shadowTexCoord;
void main()
{
vec4 shadow = shadow2DProj(shadowmap, shadowTexCoord, 0.0);
float colorshadow = shadow.r < 0.1 ? 0.5 : 1.0;
vec4 color = vec4(1,1,1,1);
gl_FragColor = vec4(color*colorshadow, color.w);
}
おかげで、この上の任意の助けのためにたくさん!
これは実際にはより多くのコメントであり、答えではありません – IanNorton