spline
spline 

所属分类:图形图象
开发工具:C++
文件大小:5282KB
下载次数:13
上传日期:2011-06-16 08:55:02
上 传 者84263926
说明:  用C++和opemgl编的贝塞尔曲线和bspline曲线以及一些实物的画法 编了一个批处理文件对结果进行显示
(In C++ and compiled opemgl Bezier curves and bspline painting as well as some kind of a batch file, compiled the results show)

文件列表:
作业1\作业1(最终)\arg_parser.h (2347, 2005-08-29)
作业1\作业1(最终)\beziercurve.cpp (4013, 2010-11-24)
作业1\作业1(最终)\beziercurve.h (347, 2010-11-24)
作业1\作业1(最终)\bezierpatch.cpp (2355, 2010-11-24)
作业1\作业1(最终)\bezierpatch.h (282, 2010-11-24)
作业1\作业1(最终)\blbkgnd.gif (145, 2005-08-29)
作业1\作业1(最终)\bsplinecurve.cpp (3828, 2010-11-24)
作业1\作业1(最终)\bsplinecurve.h (373, 2010-11-24)
作业1\作业1(最终)\classes.png (4271, 2005-08-30)
作业1\作业1(最终)\curve.cpp (143, 2010-11-24)
作业1\作业1(最终)\curve.h (199, 2010-11-24)
作业1\作业1(最终)\Debug\beziercurve.obj (58482, 2011-01-07)
作业1\作业1(最终)\Debug\bezierpatch.obj (214564, 2011-01-07)
作业1\作业1(最终)\Debug\bsplinecurve.obj (59567, 2011-01-07)
作业1\作业1(最终)\Debug\BuildLog.htm (21356, 2011-01-07)
作业1\作业1(最终)\Debug\curve.obj (39374, 2011-01-07)
作业1\作业1(最终)\Debug\glCanvas.obj (68257, 2011-01-07)
作业1\作业1(最终)\Debug\main.exe (684032, 2011-01-07)
作业1\作业1(最终)\Debug\main.exe.embed.manifest (146, 2011-01-07)
作业1\作业1(最终)\Debug\main.exe.embed.manifest.res (212, 2011-01-07)
作业1\作业1(最终)\Debug\main.exe.intermediate.manifest (145, 2011-01-07)
作业1\作业1(最终)\Debug\main.ilk (1526864, 2011-01-07)
作业1\作业1(最终)\Debug\main.obj (47913, 2011-01-07)
作业1\作业1(最终)\Debug\main.pdb (2812928, 2011-01-07)
作业1\作业1(最终)\Debug\matrix.obj (96020, 2011-01-07)
作业1\作业1(最终)\Debug\mt.dep (65, 2011-01-07)
作业1\作业1(最终)\Debug\spline1.obj (60818, 2011-01-07)
作业1\作业1(最终)\Debug\spline_parser.obj (103153, 2011-01-07)
作业1\作业1(最终)\Debug\surface.obj (39406, 2011-01-07)
作业1\作业1(最终)\Debug\surfaceofrevolution.obj (63681, 2011-01-07)
作业1\作业1(最终)\Debug\triangle_mesh.obj (50965, 2011-01-07)
作业1\作业1(最终)\Debug\vc80.idb (609280, 2011-01-07)
作业1\作业1(最终)\Debug\vc80.pdb (225280, 2011-01-07)
作业1\作业1(最终)\editor8_01.png (5106, 2005-08-30)
作业1\作业1(最终)\editor8_01a.png (5090, 2005-08-30)
作业1\作业1(最终)\editor8_01b.png (5893, 2005-08-30)
作业1\作业1(最终)\editor8_02.png (4715, 2005-08-30)
作业1\作业1(最终)\editor8_02a.png (4229, 2005-08-30)
作业1\作业1(最终)\editor8_02b.png (4700, 2005-08-30)
... ...

做这道题时真是困难重重,最初因为建工程的问题总是导致导入的文件无法识别,也因为第一次做这种,改错就花了好长一段时间,后来要熟悉原理,不懂的问题和寝室的人讨论讨论,然后再自己先从main函数出发阅读程序,摸索着写程序,在写程序的过程中,经常碰到一些类的基础知识的运用特别不熟悉,周围的同学给了我很多指点。后来调试,写批处理文件,都有请教以前做过这个作业的同学。 1 关于Bezier曲线,我的做法是四个控制点一组来绘制,每一组中根据指定的折线段的多少(curve_tessellation )近似为曲线,而且第一个控制点和最后一个控制点在曲线上。 2 关于Bspline曲线,我的做法是从第二个控制点开始,四个控制点一组,然后从第三个点开始的四个点为一组,依次近似为曲线。 3 增加控制点,该怎么把新加入的点插入到控制点序列中呢,总是想不通怎么解决,后来多看了几遍程序后,发现spline_paser已经各出通过调用PickEdge函数来确定插入的位置,同理,删除控制点有一个pick函数。Set函数在这里面起了很大的作用。不过由于题目中涉及的控制点有限,我设置的是静态数组。 4 两种曲线的转换,主要就是将数组矩阵化后进行运算。只实现了四个控制点的转换。 5 关于曲面,刚开始做总觉得好难以理解,到底应该怎么做。就Bezier曲线来说,从定义上看m*n次张量级形式的曲面,是(m+1)*(n+1)个控制点构成的空间网格所描述的表面,u,v反映了控制点是怎么影响曲面的,然后再确定边界线(其实就是画Bezier曲线),角点位置,角点切平面和角点法矢量。使用TriangleNet,指定每一维的面的个数,然后指定网格顶点的位置,假定曲线绕某一坐标轴旋转,通过u,v控制旋转面的分割,这是通过curve_tessellation和revolution_tessellation命令行控制的,然后通过Merge函数来合并网格。实现时还是有问题,问了很多同学才做出来的。 6 报错error C2381: “exit”: 重定义;__declspec(noreturn) 不同,在win7里面使用vs2005还非得把这两头文件按这个顺序排放才行#include "windows.h" #include 有时候环境也真是折腾啊! 7 做完了后,把程序调整了一下,paint函数放在spline类中,除了bezierpatch外,其它直接继承就行,这样简短了大量的代码量。 8 学会了输入命令行的调试方法,呵呵,vs2005里面,项目-属性-配置属性-调试-命令参数。

近期下载者

相关文件


收藏者