基于OpenGL的IGES格式文件中的裁剪曲面绘制.pdf

基于OpenGL的IGES格式文件中的裁剪曲面绘制.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于OpenGL的IGES格式文件中的裁剪曲面绘制

OpenGL 带有绘制NURBS 曲面与NURBS 曲线的接口,裁剪曲面是IGES 文件中的一种 实体类型,类型号为144。其参数的数据结构如下图所示: PTS 指向被修剪曲面的指针,可以是实体类型号为128(NURBS 曲面),120(旋转曲面), 122(扫掠面)等。由于OpenGL 只带有NURBS 曲面的接口,因此在实际绘制的时候,其 余类型的曲面都要转化为NURBS 曲面,转化方法可以参考《计算机辅助几何设计与非 均匀有理B 样条》 施法中。 N1 如其描述,如果为0,则说明这个曲面在其外边界处没有进行裁剪。 N2 是内边界的个数。 PT0 为指向裁剪曲面外边界的单闭合曲线的指针,指向的实体类型号为142 (参数曲面 实体上的曲线)。 PTI1 - PTIN2 为指向裁剪曲面内边界的单闭合曲线的指针(如果有内边界),指向的 实体类型号也为142。 需要提取PT0,PTI1- PTIN2 这些指针,找到对应的闭合曲线。以外边界指针PT0 的提 取为例。 PT0 指向一个142 的实体类型,如下图所示。 而实体类型142 也有几个数据,为了得到最终的闭合曲线,还需要进行一些分析与处理。 142 的参数数据如下图所示 SPTR 与与之匹配的144 中的PTS 是一样的,指向同一个需要被裁剪的曲面。BPTR 则 是闭合裁剪曲线的指针,它是定义在被裁剪曲面S 的参数空间中的曲线B,而CPTR 则 是指向曲线B 映射到欧几里德三维空间后的曲线C,PREF 是系统推荐使用哪种曲线作 为闭合曲线,1=SoB 推荐则是推荐使用BPTR 指向的闭合曲线,2=C 推荐则是推荐CPTR 指向的闭合曲线,大多数情况下都是SoB 推荐,目前我还没见过C 推荐的。 有了BPTR 这个指针,就可以得到最终的闭合曲线了。 闭合曲线是实体类型号为102 的组合曲线(Conposite Curve),它是由很多曲线(包括直 线段)组成的一个闭合环。它的第一个参数指明了它由多少个曲线构成。如图所示,它 由4 条线构成,后面的参数即为指向这些线的指针。 从图中可以看到,构成这个闭合环的线45,47,49,51 均为直线,类型号为110.提取 这些直线的数据,下面就可以用OpenGL 绘制出裁剪曲面了。 用OpenGL 绘制裁剪曲面,是在用OpenGL 绘制NURBS 曲面的基础上添加裁剪曲线完 成曲面的裁剪。也就是在原来绘制NURBS 曲面的函数之间添加修剪NURBS表面的函数。 格式如下 gluBeginSurface(); gluNurbsSurface(...); gluBeginTrim(); gluPwlCurve(..); gluNurbsCurve(..); gluEndTrim() 一对gluBeginTrim()与gluEndTrim()之间是一个裁剪曲线闭环。这个闭环可以由若干条 直线段与NURBS 曲线组合而成,直线段可以由gluPwlCurve()绘制,NURBS 曲线由 gluNurbsCurve()绘制。下面详细说一下这两个函数。 gluPwlCurve(GLUnurbsObj *nobj,GLint count,GLfloat *array,GLint stride,GLenum type); 第一个参数则是被裁剪的NURBS 曲面的指针,第二个参数则是构成这一段裁剪“曲线” 的顶点个数,构成曲线的顶点由第三个参数array 数组提供,第四个参数则是跨距,第 五个参数是枚举类型,不带权值的时候是GLU_MAP1_TRIM_2,带权的时候是 GLU_MAP1_TRIM_3。如果一个裁剪环都是由直线段构成,则只使用gluPwlCurve()即可。 如上图所示,有一个闭环ABCD ,满足闭环的条件是向量BA+CB+DC+AD = 0 (向量)。 如果是这种,则可以把ABCD 四个点存储为一个数组,调用一次gluPwlCurve()完成裁 剪,也可以采用四个数组,每个数组两个点表示一个直线,如AB ,BC,CD,DA,然后 调用四次gluPwlCurve()。后一种方法会造成数据的冗余,但是建议采用这种方法,原 因如下。 如果一个闭环像上图所示,由若干直线段与NURBS 曲线混合而成,如果想把直线段的 顶点放在一个数组内,这会给IGES 文件数据的提取带来很大的困难,因为IGES 文件 中一般是将这些线段顺序摆放的,如直线1,2,3,曲线4,直线5,曲线6 这样。一 个简洁的方式就是,按照这个顺序,一次调用gluPwlCurve()或gluNurbsCurve() 。 只要明白一点,一组gluBeginTrim()与gluE

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档