考虑以下场景。
我将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坐标。
答案 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
}
结果: