检查片段是否在指定区域内

时间:2013-12-27 10:11:36

标签: opengl shadows

考虑以下场景。 Scene

我将pMin和pMax从世界空间转换为视口空间。由pMin和pMax绑定的区域遵循用户鼠标在平面上滑动(较大的矩形)。

片段着色器内部是否有办法确定片段是否位于内部区域内?我尝试与gl_FragCoord.x和gl_FragCoord.z进行比较,但它没有产生正确的结果。

if((gl_FragCoord.x < splitMax.x && gl_FragCoord.x > splitMin.x) 
&& (gl_FragCoord.z < splitMax.z && gl_FragCoord.z > splitMin.z)){
    //within area following the mouse
} else {
   //outside of area following the mouse
}

在级联阴影贴图中,阴影贴图是根据片段的z值选择的,它是否位于计算的平截头体分割z值内。我只想做同样的事情,我希望自己看起来也考虑x坐标。

1 个答案:

答案 0 :(得分:2)

感谢freenode上## opengl的一个人,我设法通过以下方式实现了这个目标:

顶点着色器:将传入的顶点转换为世界空间

out vec4 worldPos;
...
worldPos = modelMatrix * vec4(vertex, 1.0);

片段着色器:在世界空间坐标中发送pMin和pMax

in vec3 pMin, pMax;
in vec4 worldPos;
...
if((worldPos.x > pMin.x && worldPos.x < pMax.x) && (worldPos.z > pMin.z && worldPos.z < pMax.z)){
   FragColor = vec4(1.0, 0.0, 0.0, 1.0);
} else {
   FragColor is scene lighting
}

结果: result