CG到GLSL:f3texRECT等价?

时间:2012-11-02 17:47:44

标签: opengl glsl cg

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

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

我正在调查的唯一黑暗点是函数f3texRECT,我在texture中翻译过。但是,我找不到任何关于f3texRECT的文档。

有人可以说些什么吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

f3texRECT(..args..)与Cg中的texRECT(..args..).xyz完全相同 - 它作为旧版HSL的保留而存在,而HSL没有完全普遍的混音。

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

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