2016-11-18 71 views
0

我有一个3D网格,我想在它的曲面上绘制3D贝塞尔曲线。最好的方法是什么?在现有网格上绘制贝塞尔曲线

假设我有所有必要的代码绘制网格,在其表面上选取点并根据这些点绘制贝塞尔曲线。

一个幼稚的方法是简单地选取一些点并绘制一个通过它们的贝塞尔曲线,但它可能与网格相交(在它上面)而不是在它的表面上。有没有简单的解决方案?

+0

你是什么意思“在上面”? –

+0

这并不容易。一种方法是计算网格的参数化(例如纹理坐标),在此空间中定义贝塞尔曲线并将其提升到表面上。但是,这种方法似乎会给你带来问题,并且对参数进行高度失真。另一种选择是使用细分方案并将细分的点投影回网格。但是这不会产生适当的贝塞尔曲线,投影操作通常不是唯一的。 –

回答

0

我想你想在网格三角形上放置一条曲线。在这种情况下,曲线不能平滑(导数不连续)。这是因为网格在三角形边缘不平滑。

如果这不是问题,那么比简单的解决方案可以通过选择网格边缘上的曲线末端控制点来为每个所穿过的三角形分割曲线。我不知道如何做到这一点,可能是通过查找网格边缘上的最近点来离散化输入曲线。

贝塞尔曲线的一部分是贝塞尔曲线,所以在分割输入曲线之后,可以使用现有的绘图代码。