夏天/isummer

Sun of my life !Talk is cheap, Show me the code! 追风赶月莫停留,平芜尽处是春山~

博客园 首页 新随笔 联系 管理

OpenGl中的Nurbs B样条曲面的封装的GLU的NURBS的接口

创建一个NURBS对象:

   GLUnurbs* gluNewNurbsRenderer (void);
   //创建一个NURBS对象nobj,并返回一个指向这个新对象的指针

销毁NURBS对象:

void gluDeleteNurbsRenderer(GLUnurbs *nobj);

控制NURBS对象的属性:

   gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0);//控制分格化的顶点简单的进行渲染
   gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL);//把表面渲染为多边形
   void gluNurbsProperty (GLUnurbs *nobj, GLenum property, GLfloat value );
   //控制NURBS对象的属性,property指定了属性,他可以是GLU_DISPLAY_MODE或GLU_SAMPLING_TOLERANCE,value表示这个属性应该是什么值

返回NURBS对象nobj的property属性的当前值:

		gluGetNurbsProperty(GLUnurbs *nobj, GLenum property, GLfloat* value)
		//返回NURBS对象nobj的property属性的当前值,返回值放在value数组中

创建NURBS的曲面或表面:

   gluBeginSurface(theNurb);
   gluNurbsSurface(theNurb, 
                   8, knots, 8, knots,
                   4 * 3, 3, &ctlpoints[0][0][0], 
                   4, 4, GL_MAP2_VERTEX_3);
   gluEndSurface(theNurb);

   void gluNurbsSurface(     
	   GLUnurbs            *nobj, 
	   GLint               sknot_count, //节点数量
	   float               *sknot, //节点序列
	   GLint               tknot_count, //节点数量
	   GLfloat             *tknot, //节点序列
	   GLint               s_stride, //每个参数化方向上控制点之间的浮点值的数量
	   GLint               t_stride, 
	   GLfloat             *ctlarray, //指向包含了控制点的数组
	   GLint               sorder, //表面多项式的阶数
	   GLint               torder, //表面多项式的阶数
	   GLenum              type);//表示二维求值器类型

从NURBS分格化对象获取图元:

   gluNurbsCallback(theNurb, GLU_ERROR, 
                    nurbsError);
   void gluNurbsCallback (GLUnurbs *nobj, GLenum which, void (CALLBACK* fn)() );
   //nobj是进行分格化的NURBS对象,which是用于标识回调函数的枚举值,原型如下图

  


posted on 2015-12-30 15:31  夏天/isummer  阅读(904)  评论(0编辑  收藏  举报