3
在像素着色器中,您可以丟棄一個像素,但是我會想象即使是每個像素所需的快速故障着色器都需要一個不平凡的時間?有什麼辦法頂點着色器可以丟棄整個三角形...我相當確定VS 不能訪問原語,但有什麼技巧,我們可以得到相同的結果?是否可以使用頂點着色器渲染三角形?
在這裏談論SM 3.0 - 歡迎對新版本進行完整性討論。
在像素着色器中,您可以丟棄一個像素,但是我會想象即使是每個像素所需的快速故障着色器都需要一個不平凡的時間?有什麼辦法頂點着色器可以丟棄整個三角形...我相當確定VS 不能訪問原語,但有什麼技巧,我們可以得到相同的結果?是否可以使用頂點着色器渲染三角形?
在這裏談論SM 3.0 - 歡迎對新版本進行完整性討論。
幾何着色器可以像你可能知道的那樣平淡無奇,但在SM3中沒有這樣的事情。
由於頂點着色器看到的是單個頂點,因此頂點着色器難以識別三角形。但是......原則上這是可能的。
如果將w座標設置爲零,一個點將投影到無窮大。將所有點的w座標設置爲零,並且整個三角形處於無窮大,因此不會呈現。或者,你可以設置gl_ClipDistance爲零或低於零的值(從來沒有真正使用過這些,但我猜這應該可以)。這將標記頂點在裁剪平面「後面」。如果所有三個頂點都在裁剪平面之後,則三角形不可見。
您需要一種方法來識別屬於您想要丟棄的三角形的頂點,但是......並且這並不容易,除非您有非常特殊的情況(例如知道您想要丟棄某些邊界框中的所有三角形,或頂點屬性#5爲零的所有三角形,或其他)。
有趣的想法。我的情況基本上是基於自定義切片平面(在着色器參數中傳遞)的每三次剔除。我們進行每像素測試,但是如果我們可以丟棄整個聚合物,那就太棒了。問題是,我猜從_a_頂點,如何知道其他2是否也在'錯誤'一側。真的,我想在頂點上設置一些不起作用的屬性,除非_all 3_頂點設置了它。 –
但是,但是...不僅僅是一個用戶剪輯平面呢?每個硬件上都應該支持一個定製的切片平面(我認爲即使是5-6年前的卡片也可以支持4個左右的額外平面)。或者,甚至可以用「傾斜的近平面」黑客來完成。 – Damon
@ dm.skt是的,它只是在像素級別(三角形被切片得到部分繪製)。您是否建議我們添加一個硬件剪輯平面,它將剔除整個多邊形,然後只有那些至少部分可見的對象保留供像素着色器處理? –