1

在我的引擎中,我从成对的顶点/像素着色器文件中加载 Cg 着色器。我希望能够堆叠着色器来组合它们(照明+材质等)。除了将着色器分解为单独的函数,然后从中创建单个着色器脚本字符串之外,您知道在 Cg 中堆叠不同着色器的任何好方法吗?

4

1 回答 1

2

听起来有点像你想要的类似于 DirectX 11 中的动态着色器链接功能?Cg 的接口特性可以让你完成类似的事情。它允许您重新配置着色器,以便您可以轻松、干净地执行诸如更改照明计算方式或更改材质类型之类的操作。

例如,假设您想编写一个着色器,但需要能够更改计算光照的方式。您可以定义一个 Light 接口,该接口具有以某种方式计算光线的函数。在其他地方,您可以将 Light 接口实现为例如 CoolLight 和 UberLight。在运行时,您可以指定应使用 Light 接口的哪个实现,其方式与指定其他参数的方式几乎相同。

要查看这是否是您想要的,我建议您查看 Cg 用户手册(http://developer.download.nvidia.com/cg/Cg_2.2/CgUsersManual.pdf)。如果您搜索“共享参数和接口”,则有一个小示例。

于 2009-06-14T09:50:15.307 回答