第28课 贝塞尔曲面

第28课 贝塞尔曲面

ID:14307588

大小:53.50 KB

页数:9页

时间:2018-07-27

第28课 贝塞尔曲面_第1页
第28课 贝塞尔曲面_第2页
第28课 贝塞尔曲面_第3页
第28课 贝塞尔曲面_第4页
第28课 贝塞尔曲面_第5页
资源描述:

《第28课 贝塞尔曲面》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第二十八课贝塞尔曲面这是一课关于数学运算的,没有别的内容了。来,有信心就看看它吧。          贝塞尔曲面作者: David Nikdel ( ogapo@ithink.net ) 这篇教程旨在介绍贝塞尔曲面,希望有比我更懂艺术的人能用她作出一些很COOL的东东并且展示给大家。教程不能用做一个完整的贝塞尔曲面库,而是一个展示概念的程序让你熟悉曲面怎样实现的。而且这不是一篇正规的文章,为了方便理解,我也许在有些地方术语不当;我希望大家能适应这个。最后,对那些已经熟悉贝塞尔曲面想看我写的如何的,真是丢脸;-)但你要是找到任何纰漏让我或者Ne

2、He知道,毕竟人无完人嘛?还有,所有代码没有象我一般写程序那样做优化,这是故意的。我想每个人都能明白写的是什么。好,我想介绍到此为止,继续看下文!数学::恶魔之音::(警告:内容有点长~)好,如果想理解贝塞尔曲面没有对其数学基本的认识是很难的,如果你不愿意读这一部分或者你已经知道了关于她的数学知识你可以跳过。首先我会描述贝塞尔曲线再介绍生成贝塞尔曲面。奇怪的是,如果你用过一个图形程序,你就已经熟悉了贝塞尔曲线,也许你接触的是另外的名称。它们是画曲线的最基本的方法,而且通常被表示成一系列点,其中有两个点与两端点表示左右两端的切线。下图展示了一个

3、例子。 这是最基础的贝塞尔曲线(长点的由很多点在一起(多到你都没发现))。这个曲线由4个点定义,有2个端点和2个中间控制点。对计算机而言这些点都是一样的,但是特意的我们通常把前后两对点分别连接,因为他们的连线与短点相切。曲线是一个参数化曲线,画的时候从曲线上平均找几点连接。这样你可以控制曲线曲面的精度(和计算量)。最通常的方法是远距离少细分近距离多细分,对视点,看上去总是很完好的曲面而对速度的影响总是最小。贝塞尔曲面基于一个基本方程,其他复杂的都是基于此。方程为:t + (1 - t) = 1 看起来很简单不是?的确是的,这是最基本的贝塞尔曲

4、线,一个一维的曲线。你也许从术语中猜到,贝塞尔曲线是多项式形式的。从线性代数知,一个一维的多项式是一条直线,没多大意思。好,因为基本方程对所有t都成立,我们可以平方,立方两边,怎么都行,等式都是成立的,对吧?好,我们试试立方。(t + (1-t))^3 = 1^3 t^3 + 3*t^2*(1-t) + 3*t*(1-t)^2 + (1-t)^3 = 1 这是我们最常用的计算贝塞尔曲面的方程,a)她是最低维的不需要在一个平面内的多项式(有4个控制点),而且b)两边的切线互相没有联系(对于2维的只有3个控制点)。那么你看到了贝塞尔曲线了吗?呵呵

5、,我们都没有,因为我还要加一个东西。好,因为方程左边等于1,可以肯定如果你把所有项加起来还是等于1。这是否意味着在计算曲线上一点时可以以此决定该用每个控制点的多少呢?(答案是肯定的)你对了!当我们要计算曲线上一点的值我们只需要用控制点(表示为向量)乘以每部分再加起来。基本上我们要用0<=t<=1,但不是必要的。不明白了把?这里有函数:P1*t^3 + P2*3*t^2*(1-t) + P3*3*t*(1-t)^2 + P4*(1-t)^3 = Pnew 因为多项式是连续的,有一个很好的办法在4个点间插值。曲线仅经过P1,P4,分别当t=1,0

6、。好,一切都很好,但现在我怎么把这个用在3D里呢?其实很简单,为了做一个贝塞尔曲面,你需要16个控制点,(4*4),和2个变量t,v。你要做的是计算在分量v的沿4条平行曲线的点,再用这4个点计算在分量t的点。计算了足够的这些点,我们可以用三角带连接他们,画出贝塞尔曲面。    恩,我认为现在已经有足够的数学背景了,看代码把!     #include        // 数学库#include        // 标准输入输出库#include       // 标准库typedef st

7、ruct point_3d {      // 3D点的结构 double x, y, z;} POINT_3D;typedef struct bpatch {      // 贝塞尔面片结构 POINT_3D anchors[4][4];     // 由4x4网格组成 GLuint  dlBPatch;     // 绘制面片的显示列表名称 GLuint  texture;     // 面片的纹理} BEZIER_PATCH;BEZIER_PATCH  mybezier;     // 创建一个贝塞尔曲面结构BOOL   showCPo

8、ints=TRUE;    // 是否显示控制点int   divs = 7;     // 细分精度,控制曲面的显示精度    以下是一些简单的向量数学的函数。如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。