使用Opengl ES 3.0实现内部和外部辉光

时间:2014-04-24 05:54:33

标签: graphics opengl-es directx glsl

我想为渲染的3D对象实现内部和外部发光。此处的发光仅应用于启用了发光而不适用于整个场景的3D模型。

stackoverflow中有一篇文章讨论了如何使用修改网格来实现它,在我看来这是很困难和密集的。

想知道是否可以通过多次渲染实现吗?类似于应用于场景中特定对象的绽放效果,仅适用于内部和外部边界。

1 个答案:

答案 0 :(得分:1)

我假设你想要只在对象的轮廓附近发光?

我使用多遍方法(在所有“常规”绘图之后)进行了外部发光:

  1. 使用常量输出着色器(使用发光颜色作为输出)将对象绘制到纹理(清除为完全透明),在过程中标记模板缓冲区。如果您只想在屏幕上实际可见对象的部分周围发光,请使用EQUAL深度测试。显然使用深度缓冲区来进行正常的场景绘制。

  2. 此纹理上分离的高斯模糊。

  3. 将结果混合到输出缓冲区中,以查找步骤1中没有标记模板缓冲区的所有像素。

  4. 对于内部+外部发光,您可以对(1)的结果进行边缘检测,仅保留边界附近的标记像素,然后是模糊和未屏蔽的混合。

    您还可以尝试通过使用过滤器来组合边缘检测和模糊,该过滤器根据其半径中所有样本的方差来缩放其输出。虽然......这是不可分离的。