OpenGLでFBOを使用して2パスエフェクトを作成しようとしています。
最初のパスでは、深さをカラーバッファーに書き込みます(画像1)。
頂点シェーダーで以下を使用します。
gl_Position = projection * view * gl_Vertex;
vec4 position = gl_Position/gl_Position.w;
position = position / 2.0 + 0.5;
float temp_depth = position.z;
gl_FrontColor = vec4(temp_depth,temp_depth,temp_depth,1);
2番目のパスでは、前のパスのテクスチャを使用してシーンに色を付けようとします(画像2)。
頂点シェーダーのコードは次のとおりです。
vec4 shadow_coord = projection * view * gl_Vertex;
shadow_coord = shadow_coord / shadow_coord.w;
shadow_coord = shadow_coord / 2.0 + 0.5;
gl_FrontColor = texture2D(light_depth_texture, shadow_coord.xy);
シーンは、円錐の前面にあるクワッドで構成されています。どちらの場合も、フラグメントシェーダーはgl_FragColor = gl_Color;
次のようになります。どちらの場合も、ビューマトリックスとプロジェクションマトリックスは、開始時に定義されたものとまったく同じです。問題は、shadow_coord.xyに偏差があることです。
ビューとプロジェクションの値がまったく同じである限り、同じ結果が得られるべきではありませんか?
それを修正するにはどうすればよいですか?