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

时间:2011-02-25 10:48:30

标签: shader vertex-shader

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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