我正在尝试使用OpenGL评估器绘制高阶Bezier曲线:
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时,曲线消失。如何使用评估器绘制更高阶的贝塞尔曲线?
答案 0 :(得分:1)
见论文:
Watkins和Worsey,Degree reduction of Bézier curves. 计算机辅助设计。 20(7),1988年9月,398-405。
他们所做的是将贝塞尔曲线转换为切比雪夫多项式形式,因此多项式的最后一项对形状的影响最小,删除最后一项,并将其转换回贝塞尔曲线形式。如果这会产生太多错误,则Bézier会被细分,然后再次运行该过程。
这使得将高阶曲线向下转换为立方Bézier非常容易,系统可以有效地进行原生渲染。我已经将这种方法用于几种不同的情况,并且效果很好。但有一点需要注意;本文中的矩阵方程有一些错别字。参见:
彼得森,J。,Letter to the Editor,加元,23(6),1991年8月,第460页
用于修正的方程式。不幸的是, CAD 是一个老派的学术期刊,因此论文不方便在线。你需要在某个地方将它们从图书馆中挖出来,或者支付罚款以便从Elsevier那里获得它们。
答案 1 :(得分:0)
您是否有机会得到GL_MAX_EVAL_ORDER错误?贝塞尔曲线在高度变得不稳定。如果您的OpenGL实现刚刚放弃,我不会感到惊讶。
您可以将glGet与GL_MAX_EVAL_ORDER一起使用,以查看您的实现最大值。如果你需要更高的东西,你可以随时自己动手,这也不算太糟糕。