有关GLSL中的gl_FragCoord

有关GLSL中的gl_FragCoord

         在研究阴影映射的时候,我发现了一个很有意思的变量,它可以代替我们自己使用的varying变量,给我们带来方便。但是我们也需要了解它是如何计算的。

蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/45062525。欢迎同行前来探讨。

         gl_FragCoord是在片断着色器中一个隐藏的输入变量。它代表着NDC坐标下的片元坐标。它已经经过了单位化,即w分量已为1。在可编程的流水线中,通常是这样的:

有关GLSL中的gl_FragCoord_第1张图片

         下面可以通过下面的着色器代码来获得和gl_FragCoord相同的效果:

// MVP变换
vec4 projectedPosition =
		projectionMatrix *
		viewMatrix *
		modelMatrix *
		vec4( finalPosition, 1.0 );

// 透视除法(perspective division)
vec4 normalizedPosition = projectedPosition / projectedPosition.w;

// NDC坐标映射
const mat4 ndcBiasMatrix = mat4( 0.5, 0.0, 0.0, 0.0,
								 0.0, 0.5, 0.0, 0.0,
								 0.0, 0.0, 0.5, 0.0,
								 0.5, 0.5, 0.5, 1.0 );
vec4 ndcPosition = ndcBiasMatrix * normalizedPosition;

得出的ndcPosition其实和gl_FragCoord等价。

你可能感兴趣的:(OpenGL)