1

考虑以下场景。 场景

我将 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 坐标。

4

1 回答 1

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
}

结果: 结果

于 2013-12-29T13:01:24.697 回答