2011-02-07 6 views
1

これは簡単な質問ですが、私は正しい方程式をWebで検索するのがうんざりです。GLSLがgl_FragCoord.zを目の空間zに変換する

主な問題は、誰もがこのVSような何かをやって提案することである:

varying float depth; 

depth = (gl_ModelViewMatrix * gl_Vertex); 

しかし、私はできません、深さはテクスチャに格納されているため。

とにかく、私は今では奥行値と、それを視点座標から作成するために使用された投影行列です。

わからない場合は教えてください。

ありがとうございます。 :)

答えて

3

テクスチャからデプス値を抽出すると、範囲[0,1]になります。まず、[-1,1]の範囲にスケーリングし、逆投影を適用してモデルビューの深度を取得する必要があります:

vec2 xy = vec2(x_coord,y_coord); //in [0,1] range 
vec4 v_screen = vec4(xy, texture(samplerDepth,xy), 1.0); 
vec4 v_view = inverse(gl_ProjectionMatrix) * (2.0*(read_depth-vec3(0.5))); 
float view_depth = v_view.z/v_view.w; //transfer from homogeneous coordinates 
+0

v_screenは正しく読まれますか? – karx11erx

+0

'read_depth = v_screen.z' – kvark

関連する問題