【发布时间】:2019-01-27 14:25:46
【问题描述】:
编辑:
我的问题一开始不清楚,我会尝试改写:
如何使用不同的着色器对同一个网格多边形进行不同的渲染操作?例如,我想使用一个着色器添加照明并使用另一个着色器添加雾。我需要在计算第二个着色器时使用从第一个着色器插入的颜色,但如果我不能(或者不应该)在着色器之间传递颜色缓冲区,我不知道该怎么做。 另外(这就是我的问题开始的地方),我需要对两个着色器进行相同的世界观投影计算,所以我应该在每个着色器中分别计算它吗?我应该为所有渲染操作使用一个大着色器吗?
原问题:
假设我有两个不同的着色器程序。第一个计算顶点着色器中的顶点位置,并在片段着色器中进行一些操作。
假设我想使用片段着色器进行不同的计算,但我仍然想使用第一个顶点着色器计算的相同顶点位置。我是否必须再次计算顶点位置,或者有没有办法在不同的着色器程序之间共享状态?
【问题讨论】:
-
我想在不同着色器程序的不同片段着色器中使用相同的插值顶点位置,而不是每次都重新计算顶点位置。
-
好的,那么如何将来自不同片段着色器的颜色计算加在一起呢?例如,有一个着色器程序来计算一些光照,而另一个着色器程序来计算另一种类型的光照?
-
@PanthersFan92:你所有的问题似乎都源于对着色器功能的根本误解。着色器是process of rendering 的一部分。 VS 计算光栅化所需的顶点数据。 FS 计算该光栅化的产品,以馈入后处理阶段(混合等)。当您渲染某些东西 时会调用这些着色器。它们是渲染管道的一部分,它们接收和生成的数据用于渲染您要求渲染的特定内容。
-
@PanthersFan92:然而,你刚才所说的表明你并没有真正理解我刚才所说的话。着色器不会对“缓冲区”进行“计算”;他们进行渲染。如果您想使用着色器进行“计算”,那么您必须使计算看起来像渲染。因此,您必须构建操作以在渲染管道的范围内工作。
-
@PanthersFan92:好的,你的意思是你想要渲染一个东西,你想让不同的程序对象负责它的不同方面渲染(照明,雾等)。这就是你说的吗?如果是这样,请在您的问题中提出。