我正在尝试使用GLSL ES 2.0为三角形扇形基元创建内部发光效果 - 尽管只有外边缘会受到手头效果的影响。我想有很多方法可以做到这一点,但到目前为止还没有找到任何描述。
有Make the edges of a textured polygon glow in OpenGL ES 2.0中描述的技术,然而,这对我不起作用,因为我现阶段纯粹使用原语。
我最初的想法是以某种方式计算片段着色器中距离最近边缘的距离,然后根据是否设置颜色,距离是否落在某个阈值的范围内。 (当然,颜色和alpha是距离最近边缘的距离的函数 - 此时精确的梯度曲线并不重要。)
这种方法存在两个问题:
1)如何计算从片段到最近边缘的距离? 2)如何在此过程中排除共同边,即两个(或更多)三角形共有的边?
这是一种明智的做法,如果是这样的话:我该如何解决我的两个问题?对于替代方法的建议也非常感谢。 (例如,我一直在阅读纹理数据不一定是图像,它可以用于自定义目的。非图像纹理可以作为解决方案的一部分吗?):)
答案 0 :(得分:3)
要回答你的两个问题,我认为没有任何glsl魔法会为你做这件事。当您到达片段着色器时,不再有关于边缘的任何信息,特别是尝试将真实边缘与内部边缘隔离。
我建议您为风扇添加更多顶点,并使用新的自定义属性来定义“发光级别”。例如,参见图像,我会在边缘周围放置一行顶点,定义这些顶点(和风扇的中心)以获得最大光晕,然后定义边缘以使其具有零辉光,然后您可以获得插值的辉光值在边缘和新顶点之间。