2

是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信这样的功能在第 2 代/第 3​​ 代着色器中可用,但我不知道究竟是什么配置文件,或者如何做到这一点。

4

2 回答 2

4

不,这是不可能的。

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

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

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

您听说过的功能可能是曲面细分。它不是作为片段着色器的一部分完成的,而是管道的一个单独部分,允许生成额外的几何体。

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

于 2011-11-22T21:00:30.190 回答
2

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

将 UV 映射想象为红色和绿色渐变。红色代表 X 位置映射,而绿色是 Y 位置映射。如果将这些坐标乘以柏林噪声,则映射将被偏移,因此像素也会偏移。

于 2014-09-04T01:04:30.337 回答