我有一个我创建的延迟渲染器。它将法线和深度值写入浮点纹理。从那里我可以在视图空间中获得特定片段的位置。但我希望获得像素在世界空间中的位置 我认为要将像素从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;
这里的最终目标是创建雾算法,该算法将雾计算基于远离相机的距离以及片段的高度(在世界空间中)。