我正在编写一个立方贝塞尔曲线编辑器,旨在让您在3D世界中创建、选择和修改贝塞尔曲线。
目前我正在开发选择/挑选界面。 我希望能够根据用户在屏幕空间内与实际投影表示的曲线之间的像素距离来选择曲线。
我的第一种方法是在三维空间中使用拾取光线段与曲线立方段的边界框相交处的数字分析。 我使用二分搜索来找到射线在曲线上最接近的点的近似值。它起作用,但在使用情况下缺乏稳健性,并且需要根据相机与曲线上点之间的距离来缩放“选择距离”设置。对我而言,它也不够优雅。
我目前的想法是手动将曲线部分投影到近平面上,以获得我可以进行数字分析的投影贝塞尔曲线。此外,以前的拾取光线参数现在将被缩小为单个点:用户在视口上单击的位置。
很不幸,我在原型制作之前所担心的问题成真了:贝塞尔曲线在平面上的投影不完全等同于其控制点的投影所得到的曲线。在进一步阅读该主题后(我一般对数学很糟糕),似乎投影曲线以某种方式退化为有理贝塞尔曲线,其表达方式不同。
新曲线的视觉表现与原始曲线不匹配,看起来非常接近,但我需要像素完美的匹配。
我还有其他选项来解决我的问题,例如在场景中投射一个拾取锥体,或者将曲线段一旦离散化便进行投影作为折线。不过我想知道,是否存在通过重新参数化或使用我无法自己解决的数学技巧更改投影曲线的当前问题的快速简易解决方案。
提前致谢。 编辑示例投影图像:http://i.imgur.com/1XawRof.png
目前我正在开发选择/挑选界面。 我希望能够根据用户在屏幕空间内与实际投影表示的曲线之间的像素距离来选择曲线。
我的第一种方法是在三维空间中使用拾取光线段与曲线立方段的边界框相交处的数字分析。 我使用二分搜索来找到射线在曲线上最接近的点的近似值。它起作用,但在使用情况下缺乏稳健性,并且需要根据相机与曲线上点之间的距离来缩放“选择距离”设置。对我而言,它也不够优雅。
我目前的想法是手动将曲线部分投影到近平面上,以获得我可以进行数字分析的投影贝塞尔曲线。此外,以前的拾取光线参数现在将被缩小为单个点:用户在视口上单击的位置。
很不幸,我在原型制作之前所担心的问题成真了:贝塞尔曲线在平面上的投影不完全等同于其控制点的投影所得到的曲线。在进一步阅读该主题后(我一般对数学很糟糕),似乎投影曲线以某种方式退化为有理贝塞尔曲线,其表达方式不同。
新曲线的视觉表现与原始曲线不匹配,看起来非常接近,但我需要像素完美的匹配。
我还有其他选项来解决我的问题,例如在场景中投射一个拾取锥体,或者将曲线段一旦离散化便进行投影作为折线。不过我想知道,是否存在通过重新参数化或使用我无法自己解决的数学技巧更改投影曲线的当前问题的快速简易解决方案。
提前致谢。 编辑示例投影图像:http://i.imgur.com/1XawRof.png