如何修改/替换Cg片段着色器中的像素位置?

时间:2011-11-14 14:40:17

标签: shader pixel-shader fragment-shader cg

是否可以使用Cg修改片段(像素)着色器中的像素坐标?我确信这些功能在第二代/第三代着色器中可用,但我不知道究竟是什么配置文件,或者怎么做。

2 个答案:

答案 0 :(得分:1)

不,这是不可能的。

您可以在片段着色器中修改的唯一坐标是Z,进入Z缓冲区。甚至这也会影响性能,因为它会破坏一些优化(例如Hierarchical Z)。

在执行片段着色器之前(在光栅化器中)设置X和Y位置。典型的光栅化器实际上至少生成2x2像素的像素,并且硬件并不真正单独处理像素,一直到混合阶段。

有些人倾向于模仿这种类型的功能,就是生成比必要更多的像素,并丢弃无关的像素。

你听说过的功能可能会被证明。它不是片段着色器的一部分,而是管道的一个独立部分,允许生成其他几何体。

最终,您可以使用的技术取决于您要实现的目标。但是对于X和Y的全面修改从来没有得到各种API的支持,无论是在Cg,OpenGL还是DirectX中,因为硬件无法做到。

答案 1 :(得分:1)

您无法实时修改位图的实际像素,但可以替换U / V坐标映射,这会更改每个像素的映射点。

想象一下UV​​映射为红色和绿色渐变。红色表示X位置映射,而绿色表示Y位置映射。如果你要将那些坐标乘以perlin noise,那么映射就会被抵消,因此像素也是如此。