【发布时间】:2013-12-27 10:11:35
【问题描述】:
考虑以下场景。
我将 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 坐标。
【问题讨论】:
-
您确定要使用
gl_FragCoord.z(片段的深度值[0,1]),而不是gl_FragCoord.y(片段的y值[0.5,FRAME_HEIGHT-0.5])? -
您确定您使用的是正确的坐标系吗?在 OpenGL 中,
x和y对齐屏幕的宽度和高度方向,z是深度值。/ -
我正在尝试将内部矩形移动到以 [0,1,0] 作为其向上向量的平面上。所以是的,我想使用 z 将其移向和远离查看器。
-
这是我想要的,但在片段着色器中(因为稍后会查找阴影贴图)。 antongerdelan.net/opengl/images/zones.png我应该在哪个空间做这个?我没有尝试在片段着色器中取消投影窗口坐标。我对 pMaxWorld 做了以下操作:
pMaxPerspectiveSpace = proj * view * pMaxpMaxNDC = pMax/pMax.wvp = viewportpMaxWindowSpace.x = (vp.w * pMaxNDC.x)/2 + (vp.x+vp.w)/2 -
前段时间我做了类似的事情,虽然我的问题有点不同,但我不再使用 gl_FragCoord 并将 Alpha 贴图渲染到纹理,然后从该纹理中采样,如果 Alpha 是低于某个阈值,我丢弃了该片段。这允许更复杂的形状。