刚开始学OpenGL,见笑了!
具体程序如下:(控制台程序)#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <stdio.h>
#include <gl/glut.h>GLfloat ctrlPoints[4][4][3]={{{-6.0f,-6.0f,0.0f},{-6.0f,-2.0f,0.0f},{-6.0f,2.0f,0.0f},{-6.0f,6.0f,0.0f}},
  {{-2.0f,-6.0f,0.0f},{-2.0f,-2.0f,8.0f},{-2.0f,2.0f,8.0f},{-2.0f,6.0f,0.0f}},
  {{2.0f,-6.0f,0.0f},{2.0f,-2.0f,8.0f},{2.0f,2.0f,8.0f},{2.0f,6.0f,0.0f}},
  {{6.0f,-6.0f,0.0f},{6.0f,-2.0f,0.0f},{6.0f,2.0f,0.0f},{6.0f,6.0f,0.0f}}};GLfloat knots[8]={0.0f,0.0f,0.0f,0.0f,1.0f,1.0f,1.0f,1.0f};void drawNurbs(void)
{ glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glPushMatrix(); glRotatef(45.0f,0.0f,1.0f,0.0f);
glRotatef(60.0f,1.0f,0.0f,0.0f); //定义NURBS对象
GLUnurbs* thenurb;
thenurb=gluNewNurbsRenderer(); //设置NURBS属性
gluNurbsProperty(thenurb,GLU_SAMPLING_TOLERANCE,25.0f);
gluNurbsProperty(thenurb,GLU_DISPLAY_MODE,GLU_FILL); //绘制曲面
gluBeginSurface(thenurb);
gluNurbsSurface(thenurb,8,knots,8,knots,4*3,3,&ctrlPoints[0][0][0],4,4,GL_MAP2_VERTEX_3);
gluEndSurface(thenurb); //显示控制点
int ii,jj,kk;
glPointSize(5.0f);
glBegin(GL_POINTS);
for(ii=0;ii<4;ii++)
for(jj=0;jj<4;jj++)
for(kk=0;kk<3;kk++)
glVertex3fv(&ctrlPoints[ii][jj][kk]);
glEnd(); glPopMatrix();
          glFlush();
}//主循环
//给定窗口的初始大小、标题打开一个窗口
//设置为RGBA显示模式,并处理输入消息
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(100,100);
glutCreateWindow("glwin");
glutDisplayFunc(drawNurbs); printf("Loop Begin!\n");
glutMainLoop();    
printf("Loop End!\n");
return 0;
}运行结果是一个黑色窗口正中间一个白色长方形!谢谢!

解决方案 »

  1.   

    没有设置合适的viewing volume.
    可以参考opengl红宝书
    在你代码添加一个
    void myReshape(GLsizei w,GLsizei h)
    {
    glViewport(0,0,w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0,(GLfloat)w/(GLfloat)h,1.0,20.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0,0.0,-5.0);
    }
    然后把main()中的glutDisplayFunc(drawNurbs)改为:
    glutDisplayFunc(drawNurbs);
    glutReshapeFunc(myReshape);
    这样就可以看到点东西了,具体你自己在调调吧
      

  2.   

    我在做NURBS拟合方面的课题,如果有研究这方面的朋友,希望一起交流,QQ6217883
      

  3.   

    欢迎加入 NURBS算法及其实现  群,群号37189296