贝塞尔图形填充问题:交点测试中的根计算异常
贝塞尔曲线根计算导致Unity着色器填充异常问题
我将一款ShaderToy着色器适配为Unity着色器后,整体功能正常,但存在特定异常表现,已定位到问题与贝塞尔曲线的根计算相关。
以下是异常与正常效果的对比:
- 异常的贝塞尔图形:

- 动画前期帧中显示正常的贝塞尔图形:

具体情况:
- 仅可视化图形轮廓时无异常,使用奇偶交点测试进行图形填充时会出现异常。
- 贝塞尔图形处于动画状态:定义曲线的Vector2控制点随时间线性插值变化,多数帧表现正常,但特定帧(或位置)会触发异常。
- 填充规则本质是统计贝塞尔曲线与当前uv.y坐标处水平线的交点,将该水平线作为贝塞尔函数的X轴,函数的根即为交点。我怀疑复数根是问题诱因,但根计算函数(从第74行开始)明确会丢弃复数根——该函数来自贝塞尔曲线权威资料,其中介绍了通过Cardano算法实现只保留实根的逻辑。
已尝试处理线段首尾重合导致的“近似遗漏”和重复计数问题,但并未解决异常。
请问有贝塞尔函数使用经验的开发者是否见过此类异常?希望能得到相关见解。
感谢!
内容的提问来源于stack exchange,提问作者mikemeyers
相关产品推荐
相关产品推荐

