OpenGL图形编程4网格化曲线曲面与实体造型(陈永强)ppt课件.ppt
《OpenGL图形编程4网格化曲线曲面与实体造型(陈永强)ppt课件.ppt》由会员分享,可在线阅读,更多相关《OpenGL图形编程4网格化曲线曲面与实体造型(陈永强)ppt课件.ppt(48页珍藏版)》请在三一办公上搜索。
1、1,OpenGL图形编程,武汉纺织大学数学与计算机学院,授课教师:陈永强 教授,4.网格化曲线曲面与实体造型,4.1网格化4.2曲线曲面4.3实体,4.1网格化,OpenGL只能直接显示简单的凸多边形。简单凸多边形就是多边形的边只在顶点处相交,没有重复的顶点,并且任何顶点都只有两条边相遇。如果需要显示凹多边形、中间有洞的多边形或者具有相交边的多边形,就必须分解为简单的凸多边形,即网格化。,4.1网格化,复杂多边形网格化步骤:创建一个网格化对象注册在网格化期间执行操作的回调函数 指定网格化属性指定一个或多个封闭多边形组成的轮廓,以创建并渲染分割后的多边形删除网格化对象,4.1网格化,创建网格化对
2、象GLUtesselator* gluNewTess(void);函数创建一个网格化对象,并返回一个指向该对象的指针,如果创建失败则返回NULL指针。,4.1网格化,网格化回调函数void glTessCallback(GLUtesselator* tessobj,GLenum type,void (* fn)() );函数将回调函数fn与网格化对象tessobj关联起来,类型由参数type指定。,4.1网格化,网格化属性void gluTessProperty(GLUtesselator *tessobj,GLenum property,GLdouble value );函数设置网格化对象t
3、essobj的property属性,其值设为value。最重要最复杂的是环绕规则,决定了多边形的“内部”和“外部”。,4.1网格化,定义多边形void glTessBeginPolygon(GLUtesselator *tessobj,void *user_data );void glTessEndPolygon(GLUtesselator *tessobj ); 此对函数将多边形同网格对象tessobj关联起来,参数user_data指向用户定义的数据。可以定义一条或多条轮廓线。void glTessBeginContour(GLUtesselator *tessobj);void glTe
4、ssEndContour(GLUtesselator *tessobj );此对函数指定一条封闭的轮廓线,默认将轮廓线中最后一个顶点和第一顶点相连。void gluTessVertex(GLUtesselator *tessobj,GLdouble coords3,void *vertex_data);函数指定轮廓线的一个顶点。,4.1网格化,删去网格化对象void gluDeleteTess(GLUtesselator *tessobj );删去网格化对象tessobj,并释放其占用的内存。,4.1网格化,例子红皮书tess.c,11,4.2 曲线曲面,4.2.1Bezier曲线曲面4.2.
5、2B样条曲线曲面,12,4.2.1Bezier曲线曲面,Bezier曲线Bezier曲线的求值函数:void glMap1fd(GLenum target, TYPE t1, TYPE t2, GLint stride, GLint order, const TYPE *points);参数target给出控制点数组表示的内容,一般取GL_MAP1_VERTEX_3,表示控制点数组存储控制点的三维点坐标。参数t1,t2表示Bezier曲线参数t的最小和最大值,一般为0.0和1.0。参数stride表数组points中一个坐标位置到另一个坐标位置的偏移量,对三维坐标数组,stride=3。参数o
6、rder指定Bezier曲线的阶数。参数points为指向控制点数组的指针。,13,4.2.1Bezier曲线曲面,Bezier曲线的生成步骤1.指定控制点坐标;2.设定求值函数;3.激活求值函数 glEnable(GL_MAP1_VERTEX_3)4.计算沿样条路径的位置并显示曲线 void glEvalCoord1fd(TYPE t);,14,4.2.1Bezier曲线曲面,Bezier曲线的生成步骤第4步还可以用以下函数来生成一组均匀分布的参数值,显示曲线 /指定曲线参数t从t1开始经过n步均匀地变为t2。 glMapGrid1fd(GLint n,TYPE t1,TYPE t2); /
7、指定从第n1个到第n2个参数(由glMapGrid1算出)绘制 glEvalMesh1(GLenum mode,GLint n1,GLint n2);参数mode取值为GL_POINT或GL_LINE,表示以点或折线的形式显示曲线,15,4.2.1Bezier曲线曲面,Bezier曲面Bezier曲面的求值函数: void glMap2fd(GLenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder, TYPE v1, TYPE v2, GLint vstride, GLint vorder, const TYPE *points)
8、;参数u1,u2,v1,v2分别表示Bezier曲面参数u和v的最大最小值。参数ustride和vstride分别表示数组points中相邻控制点的偏移量。参数uorder和vorder指定Bezier曲面的阶数。参数points为指向控制点坐标数组的指针。,16,4.2.1Bezier曲线曲面,Bezier曲面的生成步骤1.指定控制点坐标;2.设定求值函数;3.激活求值函数 glEnable(GL_MAP2_VERTEX_3)4.计算沿样条路径的位置并显示曲面glEvalCoord2fd(TYPE u, TYPE v);,17,4.2.1Bezier曲线曲面,Bezier曲面的生成步骤第4步
9、还可以用以下函数来生成一组均匀分布的参数值,显示曲面glMapGrid2fd(GLint nu,TYPE u1,TYPE u2, GLint nv,TYPE v1,TYPE v2);glEvalMesh2(GLenum mode,GLint nu1,GLint nu2,GLint nv1,GLint nv2);参数mode取值为GL_POINT、GL_LINE和GL_FILL,表示以点、折线或填充面的形式显示曲面,4.2.1Bezier曲线曲面,例子教材【程序8-2】红皮书bezcurve.c bezsurf.c bezmesh.c texturesurf.c,19,4.2.2B样条曲线曲面,
10、在GLU库中,提供的B样条曲线曲面接口程序称为“NURBS”函数,但可以用来生成既不是非均匀也不是有理的B样条。“NURBS”函数可以显示具有均匀结点间隔的多项式B样条,还可以用来生成Bezier样条、有理或非有理样条等。,20,4.2.2B样条曲线曲面,NURBS曲线曲面绘制的步骤:1.光照;2.指定NURBS对象;3.设置NURBS对象属性;4.错误通知;5.创建NURBS曲线曲面。,21,4.2.2B样条曲线曲面,1.光照如果要对NURBS曲面应用光照,可以调用函数使曲面自动生成面法线。 glEnable(GL_AUTO_NORMAL);也可以自己计算面法线。,22,4.2.2B样条曲线
11、曲面,2.指定NURBS对象指定一个NURBS对象,这个对象既可以是曲线也可以是曲面,然后使用函数GLUnurbsObj* gluNewNurbsRenderer(void);创建一个指向该对象的指针,以便在创建时使用。,23,4.2.2B样条曲线曲面,2.指定NURBS对象具体程序: GLUnurbsObj *curveName; curveName=gluNewNurbsRenderer();如果系统没有足够的存储容量来存储NURBS对象,gluNewNurbsRenderer函数会返回0值。,24,4.2.2B样条曲线曲面,2.指定NURBS对象当NURBS对象不需要再使用时,可以使用函
12、数删除NURBS对象。gluDeleteNurbsRenderer(curveName);删除名为curveName的NURBS对象。,25,4.2.2B样条曲线曲面,3.设置NURBS对象属性设置NURBS对象的属性,包括用于渲染的多边形的最大尺寸或线段的最大长度。 void gluNurbsProperty(GLUnurbsObj *nobj, GLenum property, GLfloat value);参数nobj指定需要设置属性的对象。参数property指定设置属性名称。参数value指定属性的值。,26,4.2.2B样条曲线曲面,3.设置NURBS对象属性Property属性名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 图形 编程 网格 曲线 曲面 实体 造型 陈永强 ppt 课件
链接地址:https://www.31ppt.com/p-1376579.html