9 opengl bezier interpolation hermite
如何使用OpenGL绘制Hermite曲线,是否有内置函数?我在网上看到了一些示例,展示了如何使用评估器绘制Bezier曲线但无法找到Hermite曲线的任何信息.
Ian*_*Ian 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开始).然后转换到贝齐尔:
Catmull-Rom到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通常是主要的代表.
正如Steven所提到的,您可以将立方Hermite曲线转换为三次Bezier曲线.它实际上非常简单.
典型的三次Hermite曲线由两个点和两个向量定义:
P0 - 起点V0 - 派生于 P0P1 - 结束点V1 - 派生于 P1转换为立方贝塞尔简单地说:
B0 = P0
B1 = P0 + V0/3
B2 = P1 - V1/3
B3 = P1
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用和评估者或您希望的任何其他方式绘制贝塞尔曲线.
您可以将任何 Hermite 曲线转换为 Bezier 曲线,然后进行绘制。它们是使用 C3 中的两个不同基数简单定义的。Google 并不是很有用,而且这似乎是一个常见问题,因此我们应该尝试使 StackOverflow 的答案变得明确,也许可以使用一些示例代码。明天我会带着更多回来。
| 归档时间: |
|
| 查看次数: |
6848 次 |
| 最近记录: |