【问题标题】:Inner glow effect for primitives using GLSL ES 2.0使用 GLSL ES 2.0 的图元的内发光效果
【发布时间】:2012-06-04 05:12:48
【问题描述】:

我正在尝试使用 GLSL ES 2.0 为三角形扇形图元创建内部发光效果 - 尽管只有外边缘会受到手头效果的影响。我想有很多方法可以做到这一点,但到目前为止还没有找到任何描述。

Make the edges of a textured polygon glow in OpenGL ES 2.0 中描述了技术,但是,这对我不起作用,因为我在这个阶段纯粹是在使用原语。

我最初的想法是在片段着色器中以某种方式计算到最近边缘的距离,然后根据距离是否落在某个阈值的范围内来设置颜色。 (当然,颜色和 alpha 是与最近边缘的距离的函数——此时确切的渐变轮廓并不重要。)

这种方法有两个问题:

1) 如何计算片段到最近边缘的距离? 2)如何排除这个过程中的共同边,即两个(或多个)三角形共有的边?

这是一种明智的方法吗?如果是:我该如何解决我的两个问题?对替代方法的建议也非常感谢。 (例如,我一直在阅读纹理数据不一定是图像,它可以用于自定义目的。非图像纹理可以成为解决方案的一部分吗?):)

【问题讨论】:

    标签: opengl-es glsl primitive


    【解决方案1】:

    要回答您的两个问题,我认为没有任何 glsl 魔法可以为您做到这一点。当您进入片段着色器时,不再有任何关于边缘的可用信息,尤其是试图将真实边缘与内部边缘分离。

    我建议为您的风扇添加更多顶点,并使用新的自定义属性来定义“发光级别”。例如,参见图片,我会在边缘周围放置一排顶点,将这些(和风扇的中心)定义为具有最大辉光,然后将边缘定义为具有零辉光,然后您可以获得插值辉光值在边和新顶点之间。

    【讨论】:

    • 谢谢蒂姆-我会试试的。并感谢您提供一些图片!我知道我不是唯一一个欣赏这一点的人。 :)
    • 我想到了一个想法:是否可以用三角条来做到这一点?如果我让你的图像左下角的顶点作为三角扇的基础顶点,我将如何指定与原始图像中的顶点相对应的最外层顶点?
    • @conciliator: 三角扇做不到,我可能也不会用三角条。我认为只使用索引三角形可能是要走的路。我没有任何证据,但我记得读过几次,使用索引三角形最适合现代 gpu 架构(关于缓存一致性)。
    • 是的,我也读过……喜欢这篇文章:hacksoflife.blogspot.no/2010/01/to-strip-or-not-to-strip.html。我部分被我工作的框架所束缚,尽管它是开源的,所以我可能会添加所需的功能。无论如何:谢谢你的提示!
    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多