有没有办法使用GLSL程序作为过滤器?

时间:2013-09-12 16:07:24

标签: c++ opengl glsl

假设我们为游戏中的不同对象设置了不同的着色器程序。例如,玩家模型有一个控制骨架系统的着色器(骨骼矩阵乘法等),或者一个粒子具有一个用于闪烁效果的着色器,墙壁具有视差映射等。

但是,如果我想在必须影响这些对象中的每一个的游戏中添加雾,该怎么办?例如,我有一个会有红雾的房间,我是否应该改变每个glsl程序以获得雾代码,或者是否有可能制作全局过滤器的方法?我想在添加功能时是否应该更改每个glsl程序?

1 个答案:

答案 0 :(得分:1)

此类事情的典型过程是在完全渲染场景中使用深度缓冲区或使用仅传递到深度缓冲区的z-pass在后期处理中使用全屏着色器。您可以将它们链接在一起并创建任意数量的效果。它通常涉及一些渲染到纹理的工作,并不是一个真正的琐碎任务(在这里发布代码太多了),但它也不是那么困难。

如果您想了解一个不错的后处理系统,请查看Torque3D中的PostFx系统:

https://github.com/GarageGames/Torque3D

以下是在帖子中使用GLSL创建雾的示例:

http://isnippets.blogspot.com/2010/10/real-time-fog-using-post-processing-in.html