示例#1
0
ts::DeBoorNet ts::BSpline::evaluate(const ts::rational u) const
{
    DeBoorNet deBoorNet;
    const tsError err = ts_bspline_evaluate(&bspline, u, deBoorNet.data());
    if (err < 0)
        throw std::runtime_error(ts_enum_str(err));
    return deBoorNet;
}
示例#2
0
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    // draw spline
    glColor3f(1.0, 1.0, 1.0);
    glLineWidth(3);
    gluBeginCurve(theNurb);
        gluNurbsCurve(
            theNurb, 
            spline.n_knots, 
            spline.knots, 
            spline.dim, 
            spline.ctrlp, 
            spline.order, 
            GL_MAP1_VERTEX_3
        );
    gluEndCurve(theNurb);

    // draw control points
    glColor3f(1.0, 0.0, 0.0);
    glPointSize(5.0);
	float j=0;
    size_t i;
    glBegin(GL_POINTS);
      for (i = 0; i < spline.n_ctrlp; i++) {
		  j+=1.0/n_ctrlp;
		  glColor3f(0.0, j, 0.0);
         glVertex3fv(&spline.ctrlp[i * spline.dim]);
	  }
    glEnd();
    
    // draw evaluation
    glColor3f(0.0, 0.0, 1.0);
    glPointSize(5.0);
    tsDeBoorNet net;
    ts_bspline_evaluate(&spline, u, &net);
    glBegin(GL_POINTS);
        glVertex3fv(net.result);
    glEnd();
    ts_deboornet_free(&net);
    
    u += 0.001;
    if (u > 4.f) {
        u = 0.f;
    }
    
    glutSwapBuffers();
    glutPostRedisplay();
}