如何将顶点着色器应用于OpenGL中场景中的所有顶点?

时间:2014-07-18 10:28:12

标签: opengl shader opentk

我现在正在OpenTK中使用一个小型引擎,到目前为止我已经开发了着色器。我想知道,如何将着色器应用于整个场景!我已经在我的世界中看到过这种情况,例如,有人制作了一个可以扭曲整个场景的着色器。但是,由于每个对象都使用自己的着色器进行渲染,我将如何实现这一目标?

4 个答案:

答案 0 :(得分:1)

您似乎指的是一种名为post processing的技术。它的工作方式是首先使用已有的着色器将整个场景渲染为纹理。然后,您可以使用片段着色器将此纹理渲染到屏幕,以应用各种效果,如运动模糊,扭曲或景深。

答案 1 :(得分:1)

  

"但是因为每个对象都使用自己的着色器进行渲染"

这不是OpenGL的工作方式。事实上,没有"模特" (在OpenGL中你可能是指" object") OpenGL一次绘制一个基元(点,线和三角形)。此外,一组基元和正在使用的着色器之间没有硬关联。

在批处理开始时绑定单​​个着色器程序并且该批处理的每个基元都受此着色器影响是微不足道的。如果批处理由整个场景组成,则整个场景使用该着色器。

答案 2 :(得分:0)

AFAIK,您一次只能绑定一个顶点着色器。

您可能想要尝试的是首先渲染纹理然后将纹理重新渲染到屏幕上,但对其应用一些更改(例如,扭曲它)。如果您要应用更复杂的更改,也可以提取深度缓冲区并使用它。

答案 3 :(得分:0)

如果在渲染循环之前绑定所需的着色器,它将影响所有项目,直到您取消绑定它(即绑定id#0)或通过glEnable()/ glDisable()禁用GL_TEXTURE_2D。