是否可以使用顶点着色器删除三角形?

在像素着色器中你可以丢弃一个像素,但我想,即使是一个快速失败的着色器,每个像素需要一个非平凡的时间吗?顶点着色器是否有任何方法可以丢弃整个三角形…我相当确定VS无法访问原语但是有什么技巧可以让我们得到相同的结果吗?

在这里谈论SM 3.0 – 欢迎对新版本进行完整性讨论.

最佳答案 几何着色器可以像您可能知道的那样轻松地完成,但在SM3中没有这样的东西.

顶点着色器识别三角形是很苛刻的,因为所有顶点着色器看到的都是单个顶点.但是……原则上它是可能的.

如果将w坐标设置为零,则会将点投影到无穷大.将所有点的w坐标设置为零,整个三角形处于无穷大,因此不会渲染.

或者,您可以将gl_ClipDistance设置为零或零以下的值(从未真正使用过那些,但我想这应该可行).这会将顶点标记为剪裁平面的“后面”.如果所有三个顶点都在剪裁平面后面,则三角形不可见.

您需要一种方法来识别属于您想要丢弃的三角形的顶点,但是……除非您有一个非常特殊的情况(例如知道您想要丢弃所有三角形),这将不容易在某些给定的边界框中,或顶点属性#5为零的所有三角形,或其他).

点赞