如何使用OpenGL绘制Hermite曲线,是否有内置函数?我在网上看到了一些示例,展示了如何使用评估器绘制Bezier曲线,但找不到Hermite曲线的任何信息。
答案 0 :(得分:11)
让Bezier的控制点矢量为[b0 b1 b2 b3],Hermite的控制点矢量为[h0 h1 v0 v1](v0和v1为点h0和h1的导数/正切)。然后我们可以使用矩阵形式来显示转换:
Hermite到Bezier
[b0] = 1 [ 3 0 0 0] [h0] [b1] - [ 3 0 1 0] [h1] [b2] 3 [ 0 3 0 -1] [v0] [b3] [ 0 3 0 0] [v1]
(这与上面Naaff的回答完全相同)。
Bezier到Hermite
[h0] = [ 1 0 0 0] [b0] [h1] [ 0 0 0 1] [b1] [v0] [-3 3 0 0] [b2] [v1] [ 0 0 -3 3] [b3]
因此,在矩阵形式中,这些可能比需要的稍微复杂一些(毕竟Naaff的代码很简单并且非常重要)。它很有用,因为我们现在可以很容易地超越隐士。
特别是我们可以引入另一个经典的基数立方参数曲线:Catmull-Rom曲线。它有控制点[c_1 c0 c1 c2](与贝塞尔曲线不同,曲线从第二个控制点到第三个控制点,因此惯常编号从-1开始)。然后转换到Bezier:
Catmull-Rom to Bezier
[b0] = 1 [ 0 6 0 0] [c_1] [b1] - [-1 6 1 0] [c0] [b2] 6 [ 0 1 6 -1] [c1] [b3] [ 0 0 6 0] [c2]
Bezier到Catmull-Rom
[c_1] = [ 6 -6 0 1] [b0] [c0] [ 1 0 0 0] [b1] [c1] [ 0 0 0 1] [b2] [c2] [ 1 0 -6 6] [b3]
我也可以使用Hermite到Catmull-Rom对,但它们很少使用,因为Bezier通常是主要的代表。
答案 1 :(得分:6)
正如Steven所提到的,您可以将立方Hermite曲线转换为三次Bezier曲线。它实际上非常简单。
典型的立方Hermite曲线由两个点和两个向量定义:
P0
- 起点V0
- 衍生于P0
P1
- 结束点V1
- 衍生于P1
转换为三次贝塞尔曲线只是:
B0 = P0
B1 = P0 + V0/3
B2 = P1 - V1/3
B3 = P1
然后,您可以使用和评估者或任何其他方式绘制贝塞尔曲线。
答案 2 :(得分:1)
您可以将任何Hermite曲线转换为Bezier曲线然后绘制。它们简单地使用C3中的两个不同碱基来定义。谷歌不是很有用,似乎这是一个常见的问题,所以我们应该尝试使StackOverflow回答确定,可能还有一些示例代码。明天我会带更多回来。