深度图是白色的 - webgl

时间:2015-03-20 22:48:42

标签: opengl-es webgl shader fragment-shader vertex-shader

我正在使用着色器在我的图像中绘制深度贴图。 这是我的着色器代码:

顶点着色器:

void main(void) {
        gl_PointSize = aPointSize;
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
        vColor = aVertexColor;
        visdepth = aisdepth;
        vHasTexture = aHasTexture;
        if (aHasTexture > 0.5)
            vTextureCoord = aTextureCoord;

    }

Fragement Shader:

void main(void) {
        if (vHasTexture < 0.5 && visdepth < 0.5)
            gl_FragColor = vColor;

        if (vHasTexture > 0.5) {    

            vec4 textureColor = texture2D(uTexture, vec2(vTextureCoord.s, vTextureCoord.t));
            gl_FragColor = vec4(textureColor.rgb, textureColor.a * uTextureAlpha);
        }
        if (visdepth > 0.5){

            float ndcDepth = (2.0 * gl_FragCoord.z - gl_DepthRange.near - gl_DepthRange.far) /
                            (gl_DepthRange.far - gl_DepthRange.near);
            float clipDepth = ndcDepth /gl_FragCoord.w;

            gl_FragColor = vec4((clipDepth*0.5)+0.5);
        }   
    }

我使用以下链接作为我的计算参考:draw the depth value in opengl using shaders

我将所有值都设为白色,如下所示:

enter image description here

enter image description here

从上面的两幅图中可以清楚地看到,图像最右侧的点落后。这不会反映在我下载的图像中。使用drawArrays函数后,我使用toDataUrl函数下载画布数据。图像是下载的结果。有谁知道这个可能的原因吗?

1 个答案:

答案 0 :(得分:0)

对于那些寻求回答这个问题的人,这里有一点提示:
如果你想查看深度图,你必须线性化它...

float linearize_Z(float depth , float zNear , float zFar){

return (2*zNear ) / (zFar + zNear - depth*(zFar -zNear)) ;
}