gpt4 book ai didi

opengl - 在OpenGL中绘制Hermite曲线

转载 作者:行者123 更新时间:2023-12-02 22:39:41 24 4
gpt4 key购买 nike

如何使用 OpenGL 绘制 Hermite 曲线,有内置函数吗?我在网上看到一些示例,展示了如何使用计算器绘制贝塞尔曲线,但找不到任何埃尔米特曲线的信息。

最佳答案

让贝塞尔曲线的控制点向量为 [b0 b1 b2 b3],埃尔米特曲线的控制点向量为 [h0 h1 v0 v1](v0 和 v1 是点 h0 和 h1 处的导数/切线)。然后我们可以用矩阵的形式来展示转换结果:

埃尔米特到贝塞尔曲线

[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 的回复完全相同)。

贝塞尔曲线到埃尔米特

[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 到贝塞尔

[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]

贝塞尔曲线到 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 对,但很少使用它们,因为贝塞尔曲线通常是主要表示形式。

关于opengl - 在OpenGL中绘制Hermite曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com