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是用于标识回调函数的枚举值,原型如下图