我正在尝试为包含四个三次贝塞尔曲线的对象绘制内部辉光/阴影。要绘制一条贝塞尔曲线,我将其分成多个部分,然后计算从当前像素到每个线段的距离,最后将其与min
混合:
// No GL_MAX blending mode in OpenGL ES 2.0
d_min = min(d_min, d)
其中d
是每个线段的距离。放大了两个线段的混合示例:
[当您有〜25个代表较短贝塞尔曲线的线段时,效果很好
[贝塞尔曲线及其各自的渐变相结合的地方的“排水沟”除外。
Q:如何避免这些伪影?有没有更好的绘制内部辉光/阴影的方法?
如何对曲线进行模糊处理然后将结果蒙版到内部区域呢?
参见:
它基本上将输入的4顶点几何块转换为具有定义的曲线宽度d
的BEZIER立方。
在片段中,您可以获得到曲线ll
的距离的信息,因此您可以直接将其用于为材质着色。对于您使用白色背景和黑色以及以下几点的情况:
double pnt[]= // cubic curve control points
{
+0.9,-0.8,0.0,
+0.5,+0.8,0.0,
-0.5,+0.8,0.0,
-0.9,-0.8,0.0,
};
我得到了此输出(d=0.05
):
我只是将顶点着色器中的最终着色线更改为:
l=ll/d; // distance from center of curve 0..1
col=vec4(l,l,l,1.0);
您可以通过l
或sqrt
使pow
线性化以增强阴影效果...