【问题标题】:GLSL convert gl_FragCoord.z into eye-space zGLSL 将 gl_FragCoord.z 转换为眼睛空间 z
【发布时间】:2011-06-22 13:27:43
【问题描述】:

这是一个简单的问题,我厌倦了在网上搜索正确的方程式。

主要问题是每个人都建议做这样的VS:

varying float depth;

depth = ( gl_ModelViewMatrix * gl_Vertex );

但我不能,因为深度存储在纹理中。

无论如何,我现在是深度值,以及用于从眼睛空间坐标创建它的投影矩阵。

如果你不太明白,请告诉我,我会尽量用词更好。

提前致谢。 :)

【问题讨论】:

    标签: glsl


    【解决方案1】:

    如果您从纹理中提取深度值 - 它在 [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
    

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 2011-08-05
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多