在像素着色器中,您可以丢弃一个像素,但我想即使是为每个像素调用的快速失败着色器也会花费不小的时间?顶点着色器有什么办法可以丢弃整个三角形...我很确定 VS无法访问原语,但是有什么技巧可以得到相同的结果吗?
在这里谈论 SM 3.0 - 欢迎讨论新版本的完整性。
在像素着色器中,您可以丢弃一个像素,但我想即使是为每个像素调用的快速失败着色器也会花费不小的时间?顶点着色器有什么办法可以丢弃整个三角形...我很确定 VS无法访问原语,但是有什么技巧可以得到相同的结果吗?
在这里谈论 SM 3.0 - 欢迎讨论新版本的完整性。
正如您可能知道的那样,几何着色器可以很简单地做到这一点,但在 SM3 中没有这样的事情。
顶点着色器很难像这样识别三角形,因为顶点着色器看到的只是单个顶点。但是......原则上这是可能的。
如果将 w 坐标设置为零,则一个点将被投影到无穷远。将所有点的w坐标设置为零,整个三角形在无穷远处,所以不会渲染。
或者,您可以将 gl_ClipDistance 设置为零或低于零的值(从未真正使用过这些,但我想这应该可行)。这会将顶点标记为剪切平面的“后面”。如果所有三个顶点都在剪切平面的后面,则三角形不可见。
您需要一种方法来识别属于您要丢弃的三角形的顶点,但是......这并不容易,除非您有非常特殊的情况(例如,知道您想要丢弃所有三角形在某个给定的边界框,或所有顶点属性#5 为零的三角形中,或其他)。