2011-11-14 43 views

回答

1

不,這是不可能的。

您可以在片段着色器中修改的唯一座標是進入Z緩衝區的Z.即便如此,它也會帶來性能上的影響,因爲它會挫敗一些優化(如Hierarchical Z)。

在執行片段着色器之前設置X和Y位置(在Rasterizer中)。典型的光柵化器實際上至少生成2×2塊像素,硬件並不能單獨處理像素,一直到混合階段。

有些人傾向於模仿這種類型的功能是產生比必要的更多的像素,並丟棄無關的像素。

你聽到的功能可能是tesselation。它不是作爲片段着色器的一部分完成的,而是管道的一個獨立部分,它允許生成其他幾何體。

最終,你可以使用什麼技術取決於你想要達到的目標。但是X和Y的全面修改從來沒有得到過各種API的支持,無論是Cg,OpenGL還是DirectX,因爲硬件無法做到這一點。

+0

好的,我該如何修改CG中的z?位移是我猜的正確的術語...我如何傳遞z位置並改變它? –

+0

您可以通過DEPTH語義更改Z(鍵入爲float)。 Cg規範說明了這一點:「[,,,]默認值是從光柵化程序獲得的插值深度。從語義上講,這個默認值被複制到片段程序執行開始時的輸出中。 – Bahbar

1

您不能實時修改位圖的實際像素,但可以取代U/V座標映射,這將更改每個像素映射的點。

將UV映射設想爲紅色和綠色漸變。紅色表示X位置映射,綠色表示Y位置映射。如果你要乘以這些座標,比如perlin噪聲,映射將被抵消,因此,像素也是如此。

相關問題