GLSL从屏幕四边形深度将视图空间中的位置转换为世界空间

时间:2014-10-03 09:55:12

标签: opengl glsl webgl

我有一个我创建的延迟渲染器。它将法线和深度值写入浮点纹理。从那里我可以在视图空间中获得特定片段的位置。但我希望获得像素在世界空间中的位置  我认为要将像素从VS转换为WS,我必须将它乘以相机的逆世界矩阵。虽然这似乎不对......

depthMap是深度纹理,w分量是clipPos.z / clipPos.w。 (从顶点着色器向下传递为clipPos = gl_Position

然后在我的屏幕四边形着色器中执行此操作

    vec2 texCoord = gl_FragCoord.xy / vec2( viewWidth, viewHeight );
    vec2 xy = texCoord * 2.0 - 1.0;
    vec4 vertexPositionProjected = vec4( xy, depthMap.w, 1.0 );
    vec4 vertexPositionVS = projectionInverseMatrix * vertexPositionProjected;
    vertexPositionVS.xyz /= vertexPositionVS.w;
    vertexPositionVS.w = 1.0;
    // This next line I don't think is correct? 
    vec3 worldPosition = (camWorldInv * vec4( vertexPositionVS.xyz, 1.0 )).rgb;

这里的最终目标是创建雾算法,该算法将雾计算基于远离相机的距离以及片段的高度(在世界空间中)。

0 个答案:

没有答案