我正在尝试将CG程序转换为GLSL程序。
到目前为止,我所做的似乎是正确的,但GLSL着色器输出的输出不正确。 不正确的行为由一组测试图像定义。
我正在调查的唯一黑暗点是函数f3texRECT
,我在texture
中翻译过。但是,我找不到任何关于f3texRECT
的文档。
有人可以说些什么吗?
答案 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采样器。