2011-02-07 51 views
1

這是一個簡單的問題,我厭倦了在Web上搜索正確的方程。GLSL將gl_FragCoord.z轉換爲eye-space 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應該是read_depth,對吧? – karx11erx 2011-04-16 09:25:34