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



是否可以使用Cg修改片段(像素)着色器中的像素坐标?我确信这种功能在第二代/第三代着色器中是可用的,但我不知道具体是什么配置文件,也不知道如何实现。

不可能。

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

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

有些人倾向于模仿这种类型的特征是生成比必要更多的像素,并丢弃多余的像素。

你听说过的功能可能是镶嵌。它不是作为片段着色器的一部分完成的,而是作为管道的一个单独部分,允许生成额外的几何图形。

最终,你可以使用什么技术取决于你想要达到的目标。但是对X和Y的全面修改从未得到各种api的支持,无论是Cg, OpenGL还是DirectX,因为硬件无法做到这一点。

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

把UV映射想象成一个红色和绿色的渐变。红色表示X位置映射,绿色表示Y位置映射。如果您要将这些坐标乘以,比如说,柏林噪声,则映射将被偏移,因此,像素也会偏移。

相关内容

  • 没有找到相关文章

最新更新