2

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に偏差があることです。

ビューとプロジェクションの値がまったく同じである限り、同じ結果が得られるべきではありませんか?

それを修正するにはどうすればよいですか?

4

1 に答える 1