3

我想为我的游戏创建雾效果,但我找不到任何关于如何使用 OpenGL ES 2.0 的教程。如果有人有教程链接,可以提供解释或源代码,我将不胜感激。

4

1 回答 1

5

在第 224 页的 OpenGL ES 2.0 编程指南中有一个关于使用着色器复制固定功能雾的部分。源代码可在 google 代码项目(MIT 许可证)中获得。这是一个巨大的 rendermonkey XML 文件,但其中嵌入的着色器源非常简单(我会直接在这里复制它,但不确定是否可以)。

这个想法是使用到特定像素的距离作为某些雾函数的输入。在该示例中,他们在顶点着色器中计算眼睛到顶点的距离,然后通过将其作为变量传递来提供到每个片段的插值距离。

然后他们做了一个简单的线性雾函数。有一些最小距离会出现零雾色,还有一些最大距离会输出所有雾色。您可以通过像素距离介于最大值和最小值之间的位置混合(线性插值)雾色和片段颜色。

正如书中提到的,一旦你完成了这项工作,就没有理由将自己限制在线性雾中。您可以轻松地使其指数化,依赖于其他变量(例如到地板的距离,由于纹理查找或噪声函数引起的变量),通过它制作神光等。

从您的问题中不清楚您到底在追求什么,因此,如果您想变得真正充满活力,那就是另一回事了(并不总是值得为获得的效果付出开发努力和性能成本)。对于现有的 WebGL 代码,您可以尝试类似黑色三梦的加载屏幕,您可以在源代码中的某个位置找到它,或者您可以通过将雾实际建模为 3d 流体来进行更多的模拟。

于 2012-07-27T22:12:13.337 回答