我正在尝试使用OpenGL赋值器绘制高阶贝塞尔曲线:
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 30, &points[0][0]);
glMapGrid1f(30, 0, 1);
glEvalMesh1(GL_LINE, 0, 30);或
glBegin(GL_LINE_STRIP);
for (int i = 0; i <= 30; i++)
glEvalCoord1f((GLfloat) i/30.0);
glEnd();当点数超过8时,曲线将消失。如何使用赋值器绘制高阶Bezier曲线?
发布于 2012-11-07 07:12:14
请参阅论文:
Watkins and Worsey,计算机辅助设计。20(7),9月1988,398-405。
他们所做的是把Bézier曲线转换成Chebyshev多项式形式,所以多项式的最后一项对形状的影响最小,去掉最后一项,然后把它转换回Bézier形式。如果这产生了太多的错误,贝塞尔曲线将被细分,并再次运行该过程。
这使得将高阶曲线向下转换为三次贝塞尔曲线变得非常容易,系统本身就可以高效地渲染。我已经在几种不同的情况下使用了这种方法,它工作得很好。但需要注意的是,论文中的矩阵方程有一些错别字。请参见:
Peterson,J.,, CAD,23(6),1991年8月,第460页
修正后的方程式。不幸的是,CAD是一份老式的学术期刊,所以论文不能方便地在线阅读。你需要把它们从图书馆的某个地方挖掘出来,或者支付罚款从爱思唯尔那里得到它们。
发布于 2010-05-04 08:09:32
你是否碰巧得到了一个GL_MAX_EVAL_ORDER错误?贝塞尔曲线在高阶数时变得不稳定。如果你的OpenGL实现放弃了,我也不会感到惊讶。
您可以结合使用glGet和GL_MAX_EVAL_ORDER来查看您的实现的最大值。如果你需要更高的东西,你可以随时滚动自己的,这并不是太坏。
https://stackoverflow.com/questions/2705562
复制相似问题