0

我正在尝试使用 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 点时,曲线消失。如何使用评估器绘制高阶贝塞尔曲线?

4

2 回答 2

1

见论文:

Watkins 和 Worsey,Bézier 曲线的度数缩减。 计算机辅助设计。20(7),1988 年 9 月,398-405。

他们所做的是将贝塞尔曲线转换为切比雪夫多项式形式,因此多项式的最后一项对形状的影响最小,删除最后一项,并将其转换回贝塞尔形式。如果这产生了太多错误,则细分 Bézier 并再次运行该过程。

这使得将高阶曲线转换为三次贝塞尔曲线变得非常容易,系统可以在本地高效地渲染。我已经在几种不同的情况下使用了这种方法,并且效果很好。不过有一个警告;论文中的矩阵方程有一些错别字。看:

Peterson, J., Letter to the Editor , CAD, 23(6), August 1991, p.460

对于修正后的方程。不幸的是, CAD是一本老派的学术期刊,因此这些论文不能方便地在线。你需要从某个地方的图书馆里把它们挖出来,或者支付罚款才能从 Elsevier 那里得到它们。

于 2012-11-06T23:12:13.657 回答
0

您是否有机会收到 GL_MAX_EVAL_ORDER 错误?贝塞尔曲线高度不稳定。如果您的 OpenGL 实现放弃了,我不会感到惊讶。

您可以将 glGet 与 GL_MAX_EVAL_ORDER 一起使用,以查看您的实现最大程度。如果你需要更高的东西,你总是可以自己动手,这还不错。

于 2010-05-04T00:09:31.733 回答