GLSL中的2D矩形描边

时间:2016-11-13 08:47:58

标签: opengl glsl

我正在尝试使用着色器绘制一个带有现代Opengl的矩形来进行填充和描边。我将填充颜色,笔触颜色和笔触宽度发送到片段着色器中的统一块(以及矩形位置和大小)。将笔划碎片设置为笔触颜色并将填充碎片设置为填充颜色的推荐方法是什么?

目前,我有两个想法浮在脑海中。首先,if语句检查frag坐标是否在矩形或矩形笔划的边界内,并根据该坐标设置frag颜色。这种方法会产生相当大的复杂if语句,当旋转矩形时,它可能会变得更糟。 (另外,我已经读过应该避免使用着色器分支)

我的第二个想法是使用带符号的距离函数来确定颜色,但我不熟悉使用这些,我有这个想法,他们不会做得太好。

我是不是在这里?有没有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

片段着色器听起来像是一个过时的阶段,如果你想光栅化中风。在执行光栅化处理之后,执行片段着色器。如果我可以提出建议,我会考虑使用geometry shader动态生成笔画的几何体。虽然可以说增量添加数据到VBO是最好的解决方案(因为大多数中风不随时间变化)。如果绘图区域的分辨率没有变化,您还可以考虑将笔划渲染到纹理,并修改它。

答案 1 :(得分:0)

你需要2个绘制调用,一个用于填充矩形,一个用于未填充矩形。 您也可以使用此库https://github.com/memononen/nanovg