0

我正在尝试将 CG 程序转换为 GLSL 程序。

到目前为止我所做的似乎是正确的,但是 GLSL 着色器输出不正确的输出。不正确的行为由一组测试图像定义。

我正在调查的唯一暗点是f3texRECT我已经翻译的函数texture。但是,我找不到任何关于f3texRECT.

有人可以说明一下吗?

4

2 回答 2

2

f3texRECT() 看起来它会使用 sampler2DRect 而不是 sampler2D 映射到texture() ——这意味着纹理坐标是非标准化的([0..textureSize-1] 而不是 [0..1])。“f3”前缀表示结果是三通道颜色。旧版本的 GLSL 有一个为此目的的 textureRect() 函数,但它已被弃用。

于 2012-11-02T18:12:46.590 回答
0

f3texRECT(..args..)与 Cg 中的完全相同texRECT(..args..).xyz——它作为旧 HSL 的遗留物而存在,没有完全通用的调酒。

在 GLSL 中,等效函数是texture,因此您也应该在那里使用texture(..arg..).xyz,尽管 args 可能略有不同。

将纹理调用从 Cg 转换为 GLSL 的主要混淆在于处理阴影纹理 - Cg 中的阴影纹理查找使用普通采样器,但tex调用在坐标中有一个额外的组件。GLSL 有不同的阴影采样器类型。因此,在将 Cg 转换为 GLSL 时,您需要根据使用方式确定哪些纹理是“正常”纹理,哪些是“阴影”纹理。在极少数情况下,您有一个纹理同时用于普通和阴影查找,您需要将其拆分为 GLSL 的两个采样器。

于 2012-11-02T19:01:36.407 回答