首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL:如何绘制高于8次的贝塞尔曲线?

OpenGL:如何绘制高于8次的贝塞尔曲线?
EN

Stack Overflow用户
提问于 2010-04-25 02:04:03
回答 2查看 2K关注 0票数 0

我正在尝试使用OpenGL赋值器绘制高阶贝塞尔曲线:

代码语言:javascript
复制
glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 30, &points[0][0]);

glMapGrid1f(30, 0, 1);
glEvalMesh1(GL_LINE, 0, 30);

代码语言:javascript
复制
glBegin(GL_LINE_STRIP);
for (int i = 0; i <= 30; i++) 
  glEvalCoord1f((GLfloat) i/30.0);
glEnd();

当点数超过8时,曲线将消失。如何使用赋值器绘制高阶Bezier曲线?

EN

回答 2

Stack Overflow用户

发布于 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是一份老式的学术期刊,所以论文不能方便地在线阅读。你需要把它们从图书馆的某个地方挖掘出来,或者支付罚款从爱思唯尔那里得到它们。

票数 1
EN

Stack Overflow用户

发布于 2010-05-04 08:09:32

你是否碰巧得到了一个GL_MAX_EVAL_ORDER错误?贝塞尔曲线在高阶数时变得不稳定。如果你的OpenGL实现放弃了,我也不会感到惊讶。

您可以结合使用glGet和GL_MAX_EVAL_ORDER来查看您的实现的最大值。如果你需要更高的东西,你可以随时滚动自己的,这并不是太坏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2705562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档