OpenGL绘制任意阶次B样条曲线

本文详细介绍了OpenGL绘制任意阶次B样条曲线的原理和步骤,包括B样条曲线的基本概念、性质特点、计算方法以及OpenGL实现过程。通过对B样条曲线的基函数、控制点和节点向量的探讨,展示了如何使用OpenGL进行画图,包括参数获取、计算采样点、图形绘制,以及如何添加鼠标和键盘监听事件来动态调整曲线形状。最后,提到了在OpenGL中处理坐标超出范围问题的解决方案和代码实现。
摘要由CSDN通过智能技术生成

OpenGL绘制任意阶次B样条曲线

一、B样条曲线简介

在B样条曲线发展起来之前,利用计算机画曲线,大多利用的是Bezier曲线,但Bezier曲线有三点不足之处:

  1. 特征多边形顶点数决定了Bezier曲线的阶次,n很大时,特征多边形对形状的控制将减弱。
  2. Bezier曲线不能作局部修改,改变任一控制点将波及整条曲线。
  3. 绘制复杂曲线需要拼接,比较繁琐。

因此在这样的背景下,B样条曲线诞生了。B样条曲线就具有了两个Bezier曲线所不具备的优点:

  1. B样条次数可独立于控制点数目(但也有一个定的限制);
  2. B样条允许局部控制曲线(面);

但同样,B样条曲线相较于Bezier曲线也更加复杂。
B样条曲线可以看作是Bezier曲线的一种变化,但B样条曲线仍然不能表达所有曲线,如圆。所有B样条曲线可以经过拓展转百年为NURBS,即非均匀有理B样条曲线。

B样条曲线的上的点的坐标位置可以通过下面这个公式来表达:

P ( t ) = ∑ k = 0 n p k B k , d ( t ) , 其 中 t m i n ≤ t ≤ t a m x , 2 ≤ d ≤ n + 1 P(t)=\sum_{k=0}^{n}p_kB_{k,d}(t),其中 t_{min}\leq t \leq t_{amx},2\leq d\leq n+1 P(t)=k=0npkBk,d(t),tminttamx,2dn+1

这里的 p k p_k pk是输入的一组n + 1个的控制点,即x, y坐标; B k , d ( t ) B_{k,d}(t) Bk,d(t)是B样条曲线的基函数, 其中d是b样条曲线的次数,在我们讲这个基函数之前,还需要知道另一个参数:节点向量 U:设U 是m + 1个非递减数的集合, u 0 ≤ u 1 ≤ u 2 ≤ . . . ≤ u m u_0 \leq u_1 \leq u_2 \leq ... \leq u_m u0u1u2...um u i u_i ui称为节点, 集合U 称为节点向量,其中若 u i + 1 − u i = C u_{i+1}-u_i=C ui+1ui=C即节点矢量是均匀的,反之则称为非均匀的。

因此要想构成一条B样条曲线就需要知道以上这个几个加粗的参数,具体作用如下:

  • 控制点p:决定曲线走向的控制顶点,由 ( x , y ) (x,y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值