2010-04-24 143 views
0

我想提请高阶Bezier曲线使用OpenGL评估:OpenGL:如何绘制度数高于8的贝塞尔曲线?

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,曲线消失。如何使用评估器绘制更高阶的贝塞尔曲线?

+1

你最好的办法可能是一次绘制一个部分,并近似曲线。 – 2010-04-24 18:13:17

+1

那么OpenGL会禁止绘制高度曲线? – maciekp 2010-04-24 18:20:28

回答

0

有没有机会得到一个GL_MAX_EVAL_ORDER错误?贝齐尔曲线在高度上变得不稳定。如果你的OpenGL实现放弃了,我不会感到惊讶。

您可以使用glGet和GL_MAX_EVAL_ORDER来查看您的实现最大值。如果你需要更高的东西,你可以随时推出自己的产品,这也不算太坏。

1

参见文章:

沃特金斯和Worsey,Degree reduction of Bézier curves. 计算机辅助设计。 20(7),1988年9月,398-405。

他们做的是贝塞尔曲线转换成切比雪夫多项式的形式,所以多项式的最后一项对形状的影响最小,下降的最后期限,并将其转换回贝塞尔形式。如果这样会产生太多的错误,则将Bézier细分并重新运行该过程。

这使得将高阶曲线向下转换为立方贝塞尔非常容易,系统可以本地高效渲染。我已经在几种不同的情况下使用了这种方法,而且效果很好。一个警告,但;本文中的矩阵方程有一些错误。参见:

彼得森,J.,Letter to the Editor, CAD,23(6),1991年8月,p.460

为校正方程。不幸的是CAD是一本古老的学术期刊,所以论文不方便在线。你需要把它们从图书馆挖出来,或者付费从Elsevier那里得到它们。